File tree Expand file tree Collapse file tree 3 files changed +439
-8
lines changed Expand file tree Collapse file tree 3 files changed +439
-8
lines changed Original file line number Diff line number Diff line change @@ -803,3 +803,20 @@ pub fn variant_derive(input: TokenStream) -> TokenStream {
803
803
let input = parse_macro_input ! ( input as DeriveInput ) ;
804
804
variant_derive:: impl_variant ( input)
805
805
}
806
+
807
+ #[ proc_macro]
808
+ pub fn cstr_bytes ( item : TokenStream ) -> TokenStream {
809
+ syn:: parse:: Parser :: parse2 (
810
+ |stream : syn:: parse:: ParseStream < ' _ > | {
811
+ let literal = stream. parse :: < syn:: LitStr > ( ) ?;
812
+ stream. parse :: < syn:: parse:: Nothing > ( ) ?;
813
+ let bytes = std:: ffi:: CString :: new ( literal. value ( ) )
814
+ . map_err ( |e| syn:: Error :: new_spanned ( & literal, format ! ( "{}" , e) ) ) ?
815
+ . into_bytes_with_nul ( ) ;
816
+ let bytes = proc_macro2:: Literal :: byte_string ( & bytes) ;
817
+ Ok ( quote:: quote! { #bytes } . into ( ) )
818
+ } ,
819
+ item. into ( ) ,
820
+ )
821
+ . unwrap_or_else ( |e| e. into_compile_error ( ) . into ( ) )
822
+ }
You can’t perform that action at this time.
0 commit comments