use crate::format::{ConstDefault, FmtRule, Mergeable, Partial};
#[derive(Default)]
pub struct ThenFmtRules<A, B> {
pub a_rules: A,
pub b_rules: B,
}
impl<A, B, R> From<R> for ThenFmtRules<A, B>
where
A: From<R>,
B: From<R>,
R: FmtRule,
{
fn from(value: R) -> Self {
Self {
a_rules: A::from(value),
b_rules: B::from(value),
}
}
}
impl<A, B> Mergeable for ThenFmtRules<A, B>
where
A: Mergeable,
B: Mergeable,
{
fn merge_with(&self, other: &Self) -> Self {
Self {
a_rules: self.a_rules.merge_with(&other.a_rules),
b_rules: self.b_rules.merge_with(&other.b_rules),
}
}
}
pub struct ExpandedThenFmtRules<A, B> {
pub a_rules: A,
pub b_rules: B,
}
impl<A, B> ConstDefault for ExpandedThenFmtRules<A, B>
where
A: ConstDefault,
B: ConstDefault,
{
const DEFAULT: Self = Self {
a_rules: A::DEFAULT,
b_rules: B::DEFAULT,
};
}
impl<A, B> Partial for ThenFmtRules<A, B>
where
A: Partial,
B: Partial,
{
type Expanded = ExpandedThenFmtRules<<A as Partial>::Expanded, <B as Partial>::Expanded>;
fn expand(&self) -> Self::Expanded {
ExpandedThenFmtRules {
a_rules: self.a_rules.expand(),
b_rules: self.b_rules.expand(),
}
}
}