diff --git a/sandboxed_api/var_proto.h b/sandboxed_api/var_proto.h index 2f1d8aa..0f86ca3 100644 --- a/sandboxed_api/var_proto.h +++ b/sandboxed_api/var_proto.h @@ -42,16 +42,26 @@ namespace sapi::v { template class Proto : public Var { public: + class PrivateToken { + private: + explicit PrivateToken() = default; + friend class Proto; + }; + static_assert(std::is_base_of::value, "Template argument must be a proto message"); + Proto(PrivateToken, std::vector data) + : wrapped_var_(std::move(data)) {} + ABSL_DEPRECATED("Use Proto<>::FromMessage() instead") explicit Proto(const T& proto) : wrapped_var_(SerializeProto(proto).value()) {} static absl::StatusOr> FromMessage(const T& proto) { SAPI_ASSIGN_OR_RETURN(std::vector len_val, SerializeProto(proto)); - return absl::StatusOr>(absl::in_place, proto); + return absl::StatusOr>(absl::in_place, PrivateToken{}, + std::move(len_val)); } size_t GetSize() const final { return wrapped_var_.GetSize(); } @@ -105,10 +115,6 @@ class Proto : public Var { } private: - friend class absl::StatusOr>; - - explicit Proto(std::vector data) : wrapped_var_(std::move(data)) {} - // The management of reading/writing the data to the sandboxee is handled by // the LenVal class. LenVal wrapped_var_;