pub trait PlaceholderValueProvider<K> {
    type Error;
    type W<'a>: TryWriteable<Error = Self::Error>
       where Self: 'a;
    type L<'a, 'l>: Writeable
       where Self: 'a;
    // Required methods
    fn value_for(&self, key: K) -> Self::W<'_>;
    fn map_literal<'a, 'l>(&'a self, literal: &'l str) -> Self::L<'a, 'l>;
}Expand description
Trait implemented on collections that can produce TryWriteables for interpolation.
This trait can add Parts for individual literals or placeholders. The implementations
of this trait on standard types do not add any Parts.
This trait has a blanket implementation and is therefore not implementable by user code.
§Examples
A custom implementation that adds parts:
use core::str::FromStr;
use icu_pattern::Pattern;
use icu_pattern::DoublePlaceholder;
use icu_pattern::DoublePlaceholderKey;
use icu_pattern::PlaceholderValueProvider;
use writeable::adapters::WithPart;
use writeable::adapters::WriteableAsTryWriteableInfallible;
use writeable::assert_writeable_parts_eq;
use writeable::Part;
use writeable::Writeable;
let pattern = Pattern::<DoublePlaceholder>::try_from_str(
    "Hello, {0} and {1}!",
    Default::default(),
)
.unwrap();
struct ValuesWithParts<'a>(&'a str, &'a str);
const PART_PLACEHOLDER_0: Part = Part {
    category: "custom",
    value: "placeholder0",
};
const PART_PLACEHOLDER_1: Part = Part {
    category: "custom",
    value: "placeholder1",
};
const PART_LITERAL: Part = Part {
    category: "custom",
    value: "literal",
};
impl PlaceholderValueProvider<DoublePlaceholderKey> for ValuesWithParts<'_> {
    type Error = core::convert::Infallible;
    type W<'a> = WriteableAsTryWriteableInfallible<WithPart<&'a str>>
    where
        Self: 'a;
    type L<'a, 'l> = WithPart<&'l str>
    where
        Self: 'a;
    #[inline]
    fn value_for(&self, key: DoublePlaceholderKey) -> Self::W<'_> {
        let writeable = match key {
            DoublePlaceholderKey::Place0 => WithPart {
                writeable: self.0,
                part: PART_PLACEHOLDER_0,
            },
            DoublePlaceholderKey::Place1 => WithPart {
                writeable: self.1,
                part: PART_PLACEHOLDER_1,
            },
        };
        WriteableAsTryWriteableInfallible(writeable)
    }
    #[inline]
    fn map_literal<'a, 'l>(&'a self, literal: &'l str) -> Self::L<'a, 'l> {
        WithPart {
            writeable: literal,
            part: PART_LITERAL,
        }
    }
}
assert_writeable_parts_eq!(
    pattern.interpolate(ValuesWithParts("Alice", "Bob")),
    "Hello, Alice and Bob!",
    [
        (0, 7, PART_LITERAL),
        (7, 12, PART_PLACEHOLDER_0),
        (12, 17, PART_LITERAL),
        (17, 20, PART_PLACEHOLDER_1),
        (20, 21, PART_LITERAL),
    ]
);Required Associated Types§
type Error
Sourcetype W<'a>: TryWriteable<Error = Self::Error>
where
    Self: 'a
 
type W<'a>: TryWriteable<Error = Self::Error> where Self: 'a
The type of TryWriteable returned by Self::value_for.
To return a Writeable, wrap it with WriteableAsTryWriteableInfallible.
Sourcetype L<'a, 'l>: Writeable
where
    Self: 'a
 
type L<'a, 'l>: Writeable where Self: 'a
The type of Writeable returned by Self::map_literal.
If you are not adding parts, this can be &'l str.
Required Methods§
Sourcefn value_for(&self, key: K) -> Self::W<'_>
 
fn value_for(&self, key: K) -> Self::W<'_>
Returns the TryWriteable to substitute for the given placeholder.
Sourcefn map_literal<'a, 'l>(&'a self, literal: &'l str) -> Self::L<'a, 'l>
 
fn map_literal<'a, 'l>(&'a self, literal: &'l str) -> Self::L<'a, 'l>
Maps a literal string to a Writeable that could contain parts.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.