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 {
803803 let input = parse_macro_input ! ( input as DeriveInput ) ;
804804 variant_derive:: impl_variant ( input)
805805}
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