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

    
    // MARK: - Helper methods
    
    open func deleteDatabaseFromDisk() {
        self.close()
        serialQueue.smartSync {
            do {
                let fileManager = FileManager.default
                try fileManager.removeItem(atPath: path)
            } catch {
                NSLog("error deleting database at path \(path), \(error)")
            }
        }
    }
    
    public func open() {
        serialQueue.smartSync {
            self.db = levelDBOpen(path.cString)
        }
    }
    

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
