// There is NO WARRANTY.
use syn::{parse_macro_input, parse_quote};
-use syn::{Data, DataStruct, DeriveInput, Meta, NestedMeta};
+use syn::{Data, DataStruct, DeriveInput, LitStr, Meta, NestedMeta};
use quote::{quote, quote_spanned, ToTokens};
use proc_macro2::{Literal, TokenStream};
#[proc_macro]
pub fn into_crlfs(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input: proc_macro2::TokenStream = input.into();
- let output = input.into_iter().map(|token| {
- dbg!(&token);
- token
- }).collect::<proc_macro2::TokenStream>();
+ let token: LitStr = syn::parse2(input).expect("expected literal");
+ let input = token.value();
+ let output = input.split_inclusive('\n')
+ .map(|s| s.trim_start_matches(&[' ','\t'][..]))
+ .map(|s| match s.strip_suffix("\n") {
+ None => [s, ""],
+ Some(l) => [l, "\r\n"],
+ })
+ .flatten()
+ .collect::<String>();
+ //dbg!(&output);
+ let output = LitStr::new(&output, token.span());
+ let output = quote!(#output);
output.into()
}
--
Content-Type: application/octet-stream
Content-Disposition: form-data; name="d"
+
"#),
);
let suffix = format!(into_crlfs!(
--b--
"#),
);
+eprintln!(">{}[{}D]{}<", &prefix, &prefix2, &suffix);
let body = hyper::body::Body::wrap_stream(
futures::stream::iter(