Instead of serde_yaml::Value being used for data Marge before trying to cast to a final type T, use a builder-like type for T - saving some intermediate serialization.
Probably a proc macro that generates the builder (or use something off the shelf) - which also implements specific merge functions as defined in the DataResolver trait.