public extension User { struct Avatar: Hashable { public let colorHex: String public let imageUrlPath: String? public var imageUrl: String? { imageUrlPath.flatMap { "https://avatars.devrant.com/\($0)" } } } } extension User.Avatar { struct CodingData: Codable { let b: String let i: String? } } extension User.Avatar.CodingData { var decoded: User.Avatar { .init( colorHex: b, imageUrlPath: i ) } }