Skip to content

Generating Rust attribute, string with import #52

@jessbowers

Description

@jessbowers

I'm trying to generate the following attribute on a struct field, which contains an import-able symbol DurationSeconds:

#[serde_with]
pub struct MyStruct {
    #[serde_as(as = "Option<DurationSeconds>")]
    duration: Option<Duration>,
}

Here's what I've tried:

let duration_seconds = rust::import("serde_with", "DurationSeconds");
quote_in! { tokens =>
    #[serde_as(as = $[str](Option<$duration_seconds>))]
}

The error I get is cryptic to me:

error[E0599]: the method `lang_supports_eval` exists for mutable reference `&mut Tokens<Rust>`, but its trait bounds were not satisfied
   --> packages/codegen/src/generator.rs:38:13
    |
38  |               quote_in! { tokens =>
    |  _____________^
39  | |                 #[serde_as(as = $[str](Option<$duration_seconds>))]
40  | |             }
    | |_____________^ method cannot be called on `&mut Tokens<Rust>` due to unsatisfied trait bounds
    |
   ::: /Users/sirius/.cargo/registry/src/index.crates.io-6f17d22bba15001f/genco-0.17.8/src/lang/rust.rs:51:1
    |
51  | / impl_lang! {
52  | |     /// Language specialization for Rust.
53  | |     pub Rust {
54  | |         type Config = Config;
...   |
137 | |     }
138 | | }
    | |_- doesn't satisfy `Rust: LangSupportsEval`
    |
    = note: the following trait bounds were not satisfied:
            `Rust: LangSupportsEval`
    = note: this error originates in the macro `quote_in` (in Nightly builds, run with -Z macro-backtrace for more info)

I take it this has to do with not being able to nest the string literal? I've also tried wrapping it with parens, and a few other things, nothings seems to work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions