     }
 }
 
+// MARK: - Equatable
+
 extension Lyrics.MetaData.Source: Equatable {
     static func ==(lhs: Lyrics.MetaData.Source, rhs: Lyrics.MetaData.Source) -> Bool {
         return lhs.rawValue == rhs.rawValue

    
    func contentString(withMetadata: Bool, ID3: Bool, timeTag: Bool, translation: Bool) -> String {
        var content = ""
        // FIXME: missing metadata
//        if withMetadata {
//            content += metadata.map {
//                return "[\($0.key):\($0.value)]\n"
//            }.joined()
//        }
        if ID3 {
            content += idTags.map {
                return "[\($0.key.rawValue):\($0.value)]\n"

    }
}

// MARK: CustomStringConvertible

extension Lyrics.MetaData: CustomStringConvertible {
    
    public var description: String {
        return Mirror(reflecting: self).children.map { "[\($0!):\($1)]\n" }.joined()
    }
}

extension Lyrics.IDTagKey: CustomStringConvertible {
    
    public var description: String {
