Module: Isomorfeus::Hamster::Marshal

Defined in:
lib/isomorfeus/hamster/marshal.rb

Constant Summary collapse

BROTLI =
'b:'.freeze

Class Method Summary collapse

Class Method Details

.dump(db, key, obj, class_cache: true, compress: false) ⇒ Object



7
8
9
10
11
# File 'lib/isomorfeus/hamster/marshal.rb', line 7

def dump(db, key, obj, class_cache: true, compress: false)
  v = ::Oj.dump(obj, mode: :object, circular: true, class_cache: class_cache)
  v = 'b:' << ::Brotli.deflate(v, quality: compress) if compress
  db.env.transaction { db.put(key, v) }
end

.load(db, key, class_cache: true) ⇒ Object



13
14
15
16
17
18
# File 'lib/isomorfeus/hamster/marshal.rb', line 13

def load(db, key, class_cache: true)
  v = db.get(key)
  return nil unless v
  v = ::Brotli.inflate(v[2..]) if v.start_with?(BROTLI)
  ::Oj.load(v, mode: :object, circular: true, class_cache: class_cache)
end

.serialize(obj, class_cache: true, compress: false) ⇒ Object



20
21
22
23
24
# File 'lib/isomorfeus/hamster/marshal.rb', line 20

def serialize(obj, class_cache: true, compress: false)
  v = ::Oj.dump(obj, mode: :object, circular: true, class_cache: class_cache)
  v = 'b:' << ::Brotli.deflate(v, quality: compress) if compress
  v
end

.unserialize(v, class_cache: true) ⇒ Object



26
27
28
29
# File 'lib/isomorfeus/hamster/marshal.rb', line 26

def unserialize(v, class_cache: true)
  v = ::Brotli.inflate(v[2..]) if v.start_with?(BROTLI)
  ::Oj.load(v, mode: :object, circular: true, class_cache: class_cache)
end