On 12.03.2026 10:12, Hannes Laimer wrote:
> On 2026-03-10 13:08, Gabriel Goller wrote:
> > Add a new serializer which uses only the builtin (include_str!) templates
> > from
> > the `proxmox-frr-templates` package in `/usr/share/proxmox-frr/templates` to
> > generate the frr config file. Also update the `build_fabric` function and
> > the
> > tests accordingly.
> >
> > Use the `phf` crate to store them in a const map.
> >
> > Signed-off-by: Gabriel Goller <[email protected]>
> > ---
>
> [..]
>
> > #[derive(Error, Debug)]
> > pub enum FrrWordError {
> > #[error("word is empty")]
> > @@ -113,7 +25,7 @@ pub enum FrrWordError {
> > ///
> > /// Every string argument or value in FRR is an FrrWord. FrrWords must
> > only contain ascii
> > /// characters and must not have a whitespace.
> > -#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
> > +#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize,
> > Deserialize)]
>
> this would skip validation, we probably want something like
> ```
> #[serde(try_from = "String")]
> ```
> instead of the `Deserialize`
The deserialize only happens when moving the rust config to perl and back, so we
don't really need to validate here, but nevertheless added it.
I used
forward_deserialize_to_from_str!(FrrWord);
from proxmox-serde.
Thanks for the review!
> > pub struct FrrWord(String);
> >
> > impl FrrWord {
> > @@ -144,12 +56,6 @@ impl FromStr for FrrWord {
> > }
> > }
> >
> > -impl Display for FrrWord {
> > - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
> > - self.0.fmt(f)
> > - }
> > -}
> > -
> > impl AsRef<str> for FrrWord {
> > fn as_ref(&self) -> &str {
> > &self.0
> > @@ -157,7 +63,7 @@ impl AsRef<str> for FrrWord {
> > }
> >
>
> [..]