Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  automatic_bounds.rs   Sprache: unbekannt

 
use darling::{FromDeriveInput, FromMeta};

#[derive(FromMeta, PartialEq, Eq, Debug)]
enum Volume {
    Whisper,
    Talk,
    Shout,
}

/// A more complex example showing the ability to skip at a field or struct
/// level while still tracking which type parameters need to be bounded.
/// This can be seen by expanding this example using `cargo expand`.
#[derive(FromMeta)]
#[allow(dead_code)]
enum Emphasis<T> {
    Constant(Volume),
    Variable(darling::util::PathList),
    #[darling(skip)]
    PerPhoneme(Option<T>),
    Strided {
        #[darling(skip)]
        step: Vec<T>,
        #[darling(multiple)]
        volume: Vec<Volume>,
    },
}

#[derive(FromDeriveInput)]
#[darling(attributes(speak))]
struct SpeakingOptions<T, U> {
    max_volume: U,
    #[darling(skip, default)]
    additional_data: Vec<T>,
}

#[derive(Default)]
struct Phoneme {
    #[allow(dead_code)]
    first: String,
}

// This is probably the holy grail for `darling`'s own internal use-case:
// Auto-apply `Default` bound to skipped *field* types in `where` clause.
impl<T, U> Default for SpeakingOptions<T, U>
where
    Vec<T>: Default,
    U: Default,
{
    fn default() -> Self {
        Self {
            max_volume: Default::default(),
            additional_data: Default::default(),
        }
    }
}

fn main() {
    let derive_input = syn::parse_str(
        r#"
        #[derive(Speak)]
        #[speak(max_volume = "shout")]
        enum HtmlElement {
            Div(String)
        }
    "#,
    )
    .unwrap();

    let parsed: SpeakingOptions<Phoneme, Volume> =
        FromDeriveInput::from_derive_input(&derive_input).unwrap();
    assert_eq!(parsed.max_volume, Volume::Shout);
    assert_eq!(parsed.additional_data.len(), 0);
}

[ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge