use std::{collections::HashSet, string::ToString};
use crate::reflection::format::{ContainerFormat, Doc, Format, FormatHolder, Named, VariantFormat};
#[test]
fn test_format_visiting() {
use Format::*;
let format = ContainerFormat::Enum(
vec![(
0,
Named {
name: "foo".into(),
doc: Doc::new(),
value: VariantFormat::Tuple(vec![
TypeName("foo".into()),
TypeName("bar".into()),
Seq(Box::new(TypeName("foo".into()))),
]),
},
)]
.into_iter()
.collect(),
Doc::new(),
);
let mut names = HashSet::new();
format
.visit(&mut |f| {
if let TypeName(x) = f {
names.insert(x.format(ToString::to_string, "."));
}
Ok(())
})
.unwrap();
assert_eq!(names.len(), 2);
assert!(VariantFormat::unknown().visit(&mut |_| Ok(())).is_err());
assert!(Format::unknown().visit(&mut |_| Ok(())).is_err());
}