#pragma once #include #include #include #include #include "nf7.hh" namespace yas::detail { template struct serializer< type_prop::not_a_fundamental, ser_case::use_internal_serializer, F, std::unique_ptr> { public: template static Archive& save(Archive& ar, const std::unique_ptr& f) { ar(std::string(f->type().name())); f->Serialize(ar); return ar; } template static Archive& load(Archive& ar, std::unique_ptr& f) { std::string name; ar(name); f = nf7::File::registry(name).Deserialize(nf7::Env::Peek(), ar); return ar; } }; template struct serializer< type_prop::not_a_fundamental, ser_case::use_internal_serializer, F, std::shared_ptr> { public: template static Archive& save(Archive& ar, const std::shared_ptr& f) { std::unique_ptr uf(f.get()); ar(uf); uf.release(); return ar; } template static Archive& load(Archive& ar, std::shared_ptr& f) { std::unique_ptr uf; ar(uf); f = std::move(uf); return ar; } }; template struct serializer< type_prop::not_a_fundamental, ser_case::use_internal_serializer, F, nf7::File::Path> { public: template static Archive& save(Archive& ar, const nf7::File::Path& p) { p.Serialize(ar); return ar; } template static Archive& load(Archive& ar, nf7::File::Path& p) { p = {ar}; return ar; } }; } // namespace detail