ron/
extensions.rs
use serde_derive::{Deserialize, Serialize};
bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
pub struct Extensions: usize {
const UNWRAP_NEWTYPES = 0x1;
const IMPLICIT_SOME = 0x2;
const UNWRAP_VARIANT_NEWTYPES = 0x4;
const EXPLICIT_STRUCT_NAMES = 0x8;
}
}
impl Extensions {
#[must_use]
pub fn from_ident(ident: &str) -> Option<Extensions> {
for (name, extension) in Extensions::all().iter_names() {
if ident == name.to_lowercase() {
return Some(extension);
}
}
None
}
}
impl Default for Extensions {
fn default() -> Self {
Extensions::empty()
}
}
#[cfg(test)]
mod tests {
use super::Extensions;
fn roundtrip_extensions(ext: Extensions) {
let ron = crate::to_string(&ext).unwrap();
let ext2: Extensions = crate::from_str(&ron).unwrap();
assert_eq!(ext, ext2);
}
#[test]
fn test_extension_serde() {
for bits in Extensions::empty().bits()..=Extensions::all().bits() {
let extensions = Extensions::from_bits_retain(bits);
roundtrip_extensions(extensions);
}
}
}