Converters.swift 23 lignes · 844 octets
import Foundation

/// Room `TypeConverter` port: `[String]` ⇄ JSON array string.
struct Converters {
    func fromStringList(_ value: [String]?) -> String {
        let list = value ?? []
        guard let data = try? JSONSerialization.data(withJSONObject: list, options: []),
              let json = String(data: data, encoding: .utf8) else {
            return "[]"
        }
        return json
    }

    func toStringList(_ value: String?) -> [String] {
        guard let value, value.isNotBlank else { return [] }
        // Kotlin threw JSONException on malformed input; here malformed input decodes to [].
        guard let data = value.data(using: .utf8),
              let arr = try? JSONSerialization.jsonObject(with: data) as? [Any] else {
            return []
        }
        return arr.compactMap { $0 as? String }
    }
}