Skip to content

Make FluentArgs a trait? #319

Open
Open
@dhardy

Description

@dhardy

FluentArgs's key API (beyond construction) would appear to be get. Maybe also iter; I don't know if that's actually needed.

Can we replace the type with a trait?

pub trait Arguments {
    fn get(&self, key: &str) -> Option<FluentValue<'_>>;

    // if necessary:
    // type Iter<'a>: Iterator<Item = (&'a str, FluentValue<'a>)> + 'a;
    // fn iter(&self) -> Self::Iter<'_>;
    // (Later this can just use impl Trait: see RFC#3425.)
}

(Technically, FluentArgs and fluent_args! don't need to change, but FluentBundle::write_pattern, format_pattern should use the trait.)

Motivation: this allows any type implementing fluent::Arguments to be used as arguments (often just via a derive macro). So, say, a Druid widget FluentText: druid::Widget<T> with data: &T could directly use that data type as arguments.


Edit: return FluentValue by value not ref to allow construction in get and Iterator::next.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions