// SPDX-FileCopyrightText: 2020 Robin Krahl // SPDX-License-Identifier: CC0-1.0 use merge::Merge; #[derive(Merge)] struct User { #[merge(skip)] pub name: &'static str, #[merge(strategy = merge::option::overwrite_none)] pub location: Option<&'static str>, #[merge(strategy = merge::vec::append)] pub groups: Vec<&'static str>, } fn main() { let defaults = User { name: "", location: Some("Internet"), groups: vec!["rust"], }; let mut ferris = User { name: "Ferris", location: None, groups: vec!["mascot"], }; ferris.merge(defaults); assert_eq!("Ferris", ferris.name); assert_eq!(Some("Internet"), ferris.location); assert_eq!(vec!["mascot", "rust"], ferris.groups); }