diff --git a/keychain/leveldb_store.go b/keychain/leveldb_store.go new file mode 100644 index 0000000..90f3e34 --- /dev/null +++ b/keychain/leveldb_store.go @@ -0,0 +1,53 @@ +package keychain + +import ( + "encoding/json" + "github.com/DE-labtory/zulu/db/leveldb" + "github.com/ethereum/go-ethereum/log" +) + +func NewLevelDBStore(handle leveldb.DBHandle) *LevelDBStore { + return &LevelDBStore{handle: handle} +} + +type LevelDBStore struct { + handle leveldb.DBHandle +} + +func (l *LevelDBStore) Store(k Key) error { + rawData, err := json.Marshal(k) + if err != nil { + return err + } + err = l.handle.Put([]byte(k.ID), rawData, true) + if err != nil { + return err + } + return nil +} + +func (l *LevelDBStore) Get(id string) Key { + var k Key + rawData, err := l.handle.Get([]byte(id)) + + // check leveldb error + if err != nil { + log.Error("error while find key :" + id + ", in level db key store") + return k + } + + // check empty data + if rawData == nil { + return k + } + + // check unmarshal data + err = json.Unmarshal(rawData, &k) + if err != nil { + log.Error("error while unmarshal key :" + id + ", in level db key store") + return k + } + + // with no err + return k +}