         }
         #endif
         self.open()
+        setupCoders()
     }
     
     convenience public init(name: String) {

    // MARK: - Accessors
    
    open func description() -> String {
        return "<LevelDB:\(self) path: \(path)>"
    }
    
    open func setValue<T: Codable>(_ value: T, forKey key: String) {

open class LevelDB {
    public let serialQueue = DispatchQueue(label: "org.amr.leveldb")
    
    public var parentPath = ""
    public var name = "Database"
	public var dictionaryEncoder: (String, [String : Any]) -> Data?
    public var dictionaryDecoder: (String, Data) -> [String : Any]?
    public var encoder: (String, Data) -> Data?
    public var decoder: (String, Data) -> Data?
    public var db: UnsafeMutableRawPointer?
    
    var dbPath: String {
        return parentPath + "/" + name
    }
    
    // MARK: - Life cycle
    
    
    required public init(parentPath: String, name: String) {
        //NSLog("LevelDB init")
        self.parentPath = parentPath
        self.name = name
        //NSLog("LevelDB self.name: \(name)")
        //self.path = parentPath + "/" + name
        //NSLog("LevelDB path: \(path)")
        self.dictionaryEncoder = { key, value in
            #if DEBUG
