     
     public var rawValue: String {
         
-        fatalError()
-    }
-}
+        return String(self.elements)
+    }
+}

    
    public var rawValue: String {
        
        fatalError()
    }
}

public extension DBusSignature {
    
    public indirect enum ValueType {
        
        /// Type code marking an 8-bit unsigned integer.
        case byte

        case let .array(type): return [.array] + type.characters
        case let .dictionary(type): return [.dictionaryEntryStart] + type.characters + [.dictionaryEntryEnd]
        case let .struct(type): return [.structStart] + type.elements.reduce([], { $0 + $1.characters }) + [.structEnd]
        case .variant: return [.variant]
        }
    }
}

public extension Collection where Element == DBusSignature.ValueType {
    
    var characters: [DBusSignature.Character] {
        
        return self.reduce([], { $0 + $1.characters })
    }
}

public extension String {
    
    init(_ signature: [DBusSignature.Character]) {
        
        self = signature.reduce("", { $0 + $1.rawValue })
    }
}

