| // Copyright 2019 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef CRDTP_SERIALIZABLE_H_ | 
 | #define CRDTP_SERIALIZABLE_H_ | 
 |  | 
 | #include <cstdint> | 
 | #include <vector> | 
 | #include "export.h" | 
 |  | 
 | namespace crdtp { | 
 | // ============================================================================= | 
 | // Serializable - An object to be emitted as a sequence of bytes. | 
 | // ============================================================================= | 
 |  | 
 | class CRDTP_EXPORT Serializable { | 
 |  public: | 
 |   // The default implementation invokes AppendSerialized with an empty vector | 
 |   // and returns it; some subclasses may override and move out internal state | 
 |   // instead to avoid copying. | 
 |   virtual std::vector<uint8_t> TakeSerialized() &&; | 
 |  | 
 |   virtual void AppendSerialized(std::vector<uint8_t>* out) const = 0; | 
 |  | 
 |   virtual ~Serializable() = default; | 
 | }; | 
 | }  // namespace crdtp | 
 |  | 
 | #endif  // CRDTP_SERIALIZABLE_H_ |