ron/
extensions.rs
1use serde_derive::{Deserialize, Serialize};
2
3bitflags::bitflags! {
5 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6 pub struct Extensions: usize {
7 const UNWRAP_NEWTYPES = 0x1;
8 const IMPLICIT_SOME = 0x2;
9 const UNWRAP_VARIANT_NEWTYPES = 0x4;
10 const EXPLICIT_STRUCT_NAMES = 0x8;
14 }
15}
16impl Extensions {
19 #[must_use]
21 pub fn from_ident(ident: &str) -> Option<Extensions> {
22 for (name, extension) in Extensions::all().iter_names() {
23 if ident == name.to_lowercase() {
24 return Some(extension);
25 }
26 }
27
28 None
29 }
30}
31
32impl Default for Extensions {
34 fn default() -> Self {
35 Extensions::empty()
36 }
37}
38#[cfg(test)]
41mod tests {
42 use super::Extensions;
43
44 fn roundtrip_extensions(ext: Extensions) {
45 let ron = crate::to_string(&ext).unwrap();
46 let ext2: Extensions = crate::from_str(&ron).unwrap();
47 assert_eq!(ext, ext2);
48 }
49
50 #[test]
51 fn test_extension_serde() {
52 for bits in Extensions::empty().bits()..=Extensions::all().bits() {
54 let extensions = Extensions::from_bits_retain(bits);
55 roundtrip_extensions(extensions);
56 }
57 }
58}