5#include "Stroika/Foundation/Streams/MemoryStream.h"
17 optional<VariantValue> tmp = Read<VariantValue> ();
18 if (not tmp.has_value ()) {
24 catch (
const BadFormatException& ) {
25 fLogger_ (LoggerMessage (LoggerMessage::Msg::eFailedToParseReadFileBadFormat, GetReadFilePath_ ()));
31 fLogger_ (LoggerMessage (LoggerMessage::Msg::eFailedToParseReadFile, GetReadFilePath_ ()));
38 optional<T> eltRead = Read<T> ();
39 optional<T> elt2Write;
41 LoggerMessage::Msg msgAugment = LoggerMessage::Msg::eWritingConfigFile_SoDefaultsEditable;
42 if (not eltRead.has_value ()) {
43 if (readFlags == ReadFlags::eWriteIfChanged) {
44 elt2Write = defaultObj;
45 msgAugment = LoggerMessage::Msg::eWritingConfigFile_SoDefaultsEditable;
49 if (readFlags == ReadFlags::eWriteIfChanged) {
50 if (not elt2Write.has_value ()) {
52 if (GetReadFilePath_ () != GetWriteFilePath_ ()) {
54 msgAugment = LoggerMessage::Msg::eWritingConfigFile_BecauseUpgraded;
57 if (not elt2Write.has_value ()) {
62 Memory::BLOB oldData =
ReadRaw ();
65 Streams::MemoryStream::Ptr<byte> outStream = Streams::MemoryStream::New<byte> ();
68 newData = outStream.As<Memory::BLOB> ();
70 if (oldData != newData) {
72 msgAugment = LoggerMessage::Msg::eWritingConfigFile_BecauseSomethingChanged;
76 fLogger_ (LoggerMessage (LoggerMessage::Msg::eFailedToCompareReadFile, GetReadFilePath_ ()));
81 if (elt2Write.has_value ()) {
82 fLogger_ (LoggerMessage (msgAugment, GetWriteFilePath_ ()));
87 fLogger_ (LoggerMessage (LoggerMessage::Msg::eFailedToWriteInUseValues, GetWriteFilePath_ ()));
91 else if (eltRead.has_value ()) {
101 Write<VariantValue> (fMapper_.
FromObject<T> (optionsObject));
nonvirtual VariantValue FromObject(const T &from) const
nonvirtual T ToObject(const VariantValue &v) const
nonvirtual void Write(const T &optionsObject)
nonvirtual BLOB ReadRaw() const
nonvirtual optional< T > Read()
nonvirtual void Write(const VariantValue &v, const Streams::OutputStream::Ptr< byte > &out) const