Some types like `FileAttribute` might be better implemented as a trait. It would get rid of some of the nesting.