MCPcopy Create free account
hub / github.com/dxx/feignhttp / parse_url_stream

Function parse_url_stream

codegen/src/util.rs:11–55  ·  view source on GitHub ↗

Parse url and return url token stream. A URL can be an expression.

(attr: &TokenStream)

Source from the content-addressed store, hash-verified

9/// Parse url and return url token stream.
10/// A URL can be an expression.
11pub fn parse_url_stream(attr: &TokenStream) -> syn::Result<proc_macro2::TokenStream> {
12 let attr_str = attr.to_string();
13 if attr_str.is_empty() {
14 return Err(syn::Error::new(
15 proc_macro2::Span::call_site(),
16 "no metadata assign",
17 ));
18 }
19
20 let attrs = attr_str.split(",");
21 let exprs: Vec<&str> = attrs.into_iter().map(|u| u).collect();
22 // The default starting expression is the URL.
23 if let Some(expr_str) = exprs.first() {
24 let expr_str = expr_str.trim();
25 let url_expr = syn::parse::<syn::Expr>(TokenStream::from_str(expr_str).unwrap())?;
26 let url_stream = parse_url(&url_expr)?;
27
28 // Skip the url.
29 for i in 1..exprs.len() {
30 let exp_str = exprs[i].trim();
31 let url_expr = syn::parse::<syn::Expr>(TokenStream::from_str(exp_str).unwrap())?;
32
33 match url_expr {
34 // An assignment path: path = xxx.
35 syn::Expr::Assign(assign) => {
36 let left = &assign.left;
37 if let syn::Expr::Path(ref k) = **left {
38 let key = k.path.segments.last().unwrap().ident.to_string();
39 if key == "path" {
40 let right = &assign.right;
41 // Url + path.
42 return Ok(quote!(#url_stream .to_string() + #right));
43 }
44 }
45 }
46 _ => {}
47 }
48 }
49 return Ok(quote!(#url_stream .to_string()));
50 }
51 Err(syn::Error::new(
52 proc_macro2::Span::call_site(),
53 "no metadata assign",
54 ))
55}
56
57/// Parse and validate the url.
58pub fn parse_url(url_expr: &syn::Expr) -> syn::Result<proc_macro2::TokenStream> {

Callers 2

http_implFunction · 0.85
feign_implFunction · 0.85

Calls 1

parse_urlFunction · 0.85

Tested by

no test coverage detected