Mavryk_stdlib_unix.Stored_dataPersistent data manager.
Every data read/write operation is protected by a mutex preventing concurrent data-races.
This error is returned when the requested data is not found.
make_file ?(json=false) ~filepath encoding represents a file located at filepath. The content of this value is encoded using encoding. By default, the content is encoded in binary content except if json=true. eq is used internally to test whether the contents of the file should be updated when calling write or update_with.
Warning It is the caller responsability to ensure that the base directory of the filepath exists; otherwise, reading and writing will fail.
val get : 'a t -> 'a Lwt.tget data accesses the data (cached).
val write : 'a t -> 'a -> unit Mavryk_error_monad.Error_monad.tzresult Lwt.twrite data value overwrites the previous data with the new value. The cache is only updated if the write succeeds. If the write fails, it is up to the user to retry.
val write_file :
'a file ->
'a ->
unit Mavryk_error_monad.Error_monad.tzresult Lwt.twrite_file encoded_file value raw writes the encoded_file with the value.
Warning this function should not be used in a normal context as it aims to overwrite the target without avoiding data races. Favour the usage of write.
val update_with :
'a t ->
('a -> 'a Lwt.t) ->
unit Mavryk_error_monad.Error_monad.tzresult Lwt.tupdate_with data f atomically updates data with the result of the application of f. Concurrent accesses to the data will block until the value is updated.
The cache is only updated if the write succeeds. If the write fails, it is up to the user to retry.
Warning Calling read/write in f will result in a deadlock.
val load : 'a file -> 'a t Mavryk_error_monad.Error_monad.tzresult Lwt.tload encoded_file loads and decode a data from an encoded_file.
val init :
'a file ->
initial_data:'a ->
'a t Mavryk_error_monad.Error_monad.tzresult Lwt.tinit encoded_file eq ~initial_data creates or load an on-disk data. If the file already exists, then the data is read from the file. Otherwise, initial_data is used.