unic-langid-macros-impl-0.9.0/.cargo_vcs_info.json0000644000000001121365450464500155610ustar00{ "git": { "sha1": "0432f0414e443c3c6cda5da584205e41ac41ff2c" } } unic-langid-macros-impl-0.9.0/Cargo.toml0000644000000023131365450464500135640ustar00# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies # # If you believe there's an error in this file please file an # issue against the rust-lang/cargo repository. If you're # editing this file be aware that the upstream Cargo.toml # will likely look very different (and much more reasonable) [package] edition = "2018" name = "unic-langid-macros-impl" version = "0.9.0" authors = ["Manish Goregaokar ", "Zibi Braniecki "] include = ["src/**/*", "benches/*.rs", "Cargo.toml", "README.md"] description = "API for managing Unicode Language Identifiers" readme = "README.md" categories = ["internationalization"] license = "MIT/Apache-2.0" repository = "https://github.com/zbraniecki/unic-locale" [lib] proc_macro = true [dependencies.proc-macro-hack] version = "0.5" [dependencies.quote] version = "1.0" [dependencies.syn] version = "1.0" features = ["parsing", "proc-macro"] default-features = false [dependencies.unic-langid-impl] version = "0.9" unic-langid-macros-impl-0.9.0/Cargo.toml.orig010064400017500001731000000012611365450454000172500ustar0000000000000000[package] name = "unic-langid-macros-impl" description = "API for managing Unicode Language Identifiers" version = "0.9.0" authors = ["Manish Goregaokar ", "Zibi Braniecki "] edition = "2018" readme = "README.md" repository = "https://github.com/zbraniecki/unic-locale" license = "MIT/Apache-2.0" categories = ["internationalization"] include = [ "src/**/*", "benches/*.rs", "Cargo.toml", "README.md" ] [lib] proc_macro = true [dependencies] unic-langid-impl = { version = "0.9", path = "../unic-langid-impl" } syn = { version = "1.0", default-features = false, features = ["parsing", "proc-macro"] } quote = "1.0" proc-macro-hack = "0.5" unic-langid-macros-impl-0.9.0/README.md010064400017500001731000000001341356261012300156270ustar0000000000000000This is an internal macro implementation crate for `unic-langid`. Please use `unic-langid`. unic-langid-macros-impl-0.9.0/src/lib.rs010064400017500001731000000062601365450333000162640ustar0000000000000000extern crate proc_macro; use proc_macro::TokenStream; use proc_macro_hack::proc_macro_hack; use quote::quote; use syn::{parse_macro_input, LitStr}; use unic_langid_impl::{subtags, LanguageIdentifier}; #[proc_macro_hack] pub fn lang(input: TokenStream) -> TokenStream { let id = parse_macro_input!(input as LitStr); let parsed: subtags::Language = id.value().parse().expect("Malformed Language Subtag"); let lang: Option = parsed.into(); let lang = if let Some(lang) = lang { quote!(unsafe { $crate::subtags::Language::from_raw_unchecked(#lang) }) } else { quote!(None) }; TokenStream::from(quote! { #lang }) } #[proc_macro_hack] pub fn script(input: TokenStream) -> TokenStream { let id = parse_macro_input!(input as LitStr); let parsed: subtags::Script = id.value().parse().expect("Malformed Script Subtag"); let script: u32 = parsed.into(); TokenStream::from(quote! { unsafe { $crate::subtags::Script::from_raw_unchecked(#script) } }) } #[proc_macro_hack] pub fn region(input: TokenStream) -> TokenStream { let id = parse_macro_input!(input as LitStr); let parsed: subtags::Region = id.value().parse().expect("Malformed Region Subtag"); let region: u32 = parsed.into(); TokenStream::from(quote! { unsafe { $crate::subtags::Region::from_raw_unchecked(#region) } }) } #[proc_macro_hack] pub fn variant_fn(input: TokenStream) -> TokenStream { let id = parse_macro_input!(input as LitStr); let parsed: subtags::Variant = id.value().parse().expect("Malformed Variant Subtag"); let variant: u64 = parsed.into(); TokenStream::from(quote! { unsafe { $crate::subtags::Variant::from_raw_unchecked(#variant) } }) } #[proc_macro_hack] pub fn langid(input: TokenStream) -> TokenStream { let id = parse_macro_input!(input as LitStr); let parsed: LanguageIdentifier = id.value().parse().expect("Malformed Language Identifier"); let (lang, script, region, variants) = parsed.into_parts(); let lang: Option = lang.into(); let lang = if let Some(lang) = lang { quote!(unsafe { $crate::subtags::Language::from_raw_unchecked(#lang) }) } else { quote!($crate::subtags::Language::default()) }; let script = if let Some(script) = script { let script: u32 = script.into(); quote!(Some(unsafe { $crate::subtags::Script::from_raw_unchecked(#script) })) } else { quote!(None) }; let region = if let Some(region) = region { let region: u32 = region.into(); quote!(Some(unsafe { $crate::subtags::Region::from_raw_unchecked(#region) })) } else { quote!(None) }; let variants = if !variants.is_empty() { let v: Vec<_> = variants .iter() .map(|v| { let variant: u64 = v.into(); quote!(unsafe { $crate::subtags::Variant::from_raw_unchecked(#variant) }) }) .collect(); quote!(Some(Box::new([#(#v,)*]))) } else { quote!(None) }; TokenStream::from(quote! { unsafe { $crate::LanguageIdentifier::from_raw_parts_unchecked(#lang, #script, #region, #variants) } }) }