codama_attributes/codama_directives/
encoding_directive.rs

1use codama_nodes::BytesEncoding;
2use codama_syn_helpers::{extensions::*, Meta};
3
4#[derive(Debug, PartialEq)]
5pub struct EncodingDirective {
6    pub encoding: BytesEncoding,
7}
8
9impl EncodingDirective {
10    pub fn parse(meta: &Meta) -> syn::Result<Self> {
11        let pv = meta.assert_directive("encoding")?.as_path_value()?;
12        let value = pv.value.as_path()?;
13        match BytesEncoding::try_from(value.to_string()) {
14            Ok(encoding) => Ok(Self { encoding }),
15            _ => Err(value.error("invalid encoding")),
16        }
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn ok() {
26        let meta: Meta = syn::parse_quote! { encoding = base64 };
27        let directive = EncodingDirective::parse(&meta).unwrap();
28        assert_eq!(
29            directive,
30            EncodingDirective {
31                encoding: BytesEncoding::Base64
32            }
33        );
34    }
35}