C++17 API

The C++ wrapper is header-only and owns values copied from the C ABI.

namespace postproject

Enums

enum class ErrorCode : std::uint32_t

Values:

enumerator ok
enumerator invalid_argument
enumerator not_found
enumerator already_exists
enumerator io
enumerator storage
enumerator migration
enumerator conflict
enumerator ambiguous_resolution
enumerator fingerprint
enumerator unsupported
enumerator internal
enum class ObjectKind : std::uint32_t

Values:

enumerator production
enumerator asset
enumerator representation
enumerator resource
enumerator activity
enum class RepresentationKind : std::uint32_t

Values:

enumerator original
enumerator proxy
enumerator optimized
enumerator derived
enum class ContentStructureKind : std::uint32_t

Values:

enumerator single_resource
enumerator image_sequence
enumerator ordered_parts
enumerator package
enum class LocatorAvailability : std::uint32_t

Values:

enumerator unknown
enumerator online
enumerator offline
enum class RepresentationAvailability : std::uint32_t

Values:

enumerator online
enumerator partial
enumerator offline
enumerator ambiguous
enumerator error
enum class ResourceResolutionState : std::uint32_t

Values:

enumerator online_at_known_locator
enumerator resolved_exact
enumerator resolved_probable
enumerator offline
enumerator ambiguous
enumerator error
enum class AvailabilityIssueKind : std::uint32_t

Values:

enumerator offline_resource
enumerator ambiguous_resource
enumerator resource_error
enumerator missing_frames
enum class EvidenceKind : std::uint32_t

Values:

enumerator known_locator_available
enumerator exact_fingerprint_match
enumerator full_hash_match
enumerator partial_fingerprint_match
enumerator file_size_match
enumerator file_name_match
enumerator relative_path_similarity
enumerator media_root_relation
enumerator conflicting_candidate
enumerator discovery_error
enumerator media_root_unmapped
enumerator media_root_unavailable

Functions

inline std::uint32_t abi_version() noexcept
struct Activity
#include <postproject.hpp>

Public Members

Uuid id
std::string kind
std::optional<std::int64_t> started_at_unix_micros
std::optional<std::int64_t> finished_at_unix_micros
std::optional<ToolIdentity> tool
std::optional<AgentIdentity> agent
std::vector<ActivityEdge> inputs
std::vector<ActivityEdge> outputs
struct ActivityCreatedEvent
#include <postproject.hpp>

Public Members

Uuid activity_id
std::string kind
struct ActivityEdge
#include <postproject.hpp>

Public Members

Uuid representation_id
std::optional<std::string> role
struct ActivityInputAddedEvent
#include <postproject.hpp>

Public Members

Uuid activity_id
Uuid representation_id
std::optional<std::string> role
struct ActivityOutputAddedEvent
#include <postproject.hpp>

Public Members

Uuid activity_id
Uuid representation_id
std::optional<std::string> role
struct ActivitySpec
#include <postproject.hpp>

Public Members

std::string kind
std::optional<std::int64_t> started_at_unix_micros
std::optional<std::int64_t> finished_at_unix_micros
std::optional<ToolIdentity> tool
std::optional<AgentIdentity> agent
std::vector<ActivityEdge> inputs
std::vector<ActivityEdge> outputs
struct AgentIdentity
#include <postproject.hpp>

Public Members

std::optional<std::string> name
std::optional<ExternalIdentifier> identifier
struct Asset
#include <postproject.hpp>

Public Members

Uuid id
std::int64_t created_at_unix_micros
std::optional<std::string> display_name
std::optional<std::string> import_source
struct AssetImportedEvent
#include <postproject.hpp>

Public Members

Uuid asset_id
struct AvailabilityIssue
#include <postproject.hpp>

Public Members

Uuid resource_id
bool required
AvailabilityIssueKind kind
std::vector<std::int64_t> frames
class Error : public std::runtime_error
#include <postproject.hpp>

Public Functions

inline Error(ErrorCode code, std::string message)
inline ErrorCode code() const noexcept

Private Members

ErrorCode code_
struct Evidence
#include <postproject.hpp>

Public Members

EvidenceKind kind
std::optional<std::string> detail
struct ExternalIdentifier
#include <postproject.hpp>

Public Members

std::string scheme
std::string value
std::optional<std::string> qualifier
struct ExternalIdentifierAddedEvent
#include <postproject.hpp>

Public Members

ObjectRef target
ExternalIdentifier identifier
struct ExternalIdentifierRemovedEvent
#include <postproject.hpp>

Public Members

ObjectRef target
ExternalIdentifier identifier
struct FileResourceInput
#include <postproject.hpp>

Public Members

std::string path
std::string role
bool required
struct Fingerprint
#include <postproject.hpp>

Public Members

std::string algorithm
std::uint16_t version
std::vector<std::uint8_t> value
struct HostObjectBinding
#include <postproject.hpp>

Public Functions

inline std::string toString() const

Public Members

Uuid production_id
ObjectRef object

Public Static Functions

static inline HostObjectBinding fromString(std::string_view value)

Friends

inline friend constexpr bool operator==(const HostObjectBinding &left, const HostObjectBinding &right) noexcept
struct ImageSequenceDescriptor
#include <postproject.hpp>

Public Members

std::string prefix
std::string suffix
std::uint8_t padding
std::int64_t start
std::int64_t end
std::uint32_t step
std::uint32_t rate_numerator
std::uint32_t rate_denominator
std::vector<std::int64_t> missing_frames
struct ImageSequenceInput
#include <postproject.hpp>

Public Members

std::string directory
std::string prefix
std::string suffix
std::uint8_t padding
std::int64_t start
std::int64_t end
std::uint32_t step
std::uint32_t rate_numerator
std::uint32_t rate_denominator
std::vector<std::int64_t> missing_frames
struct Locator
#include <postproject.hpp>

Public Members

Uuid id
std::string uri
LocatorAvailability availability
std::optional<std::int64_t> last_seen_unix_micros
struct LocatorAddedEvent
#include <postproject.hpp>

Public Members

Uuid resource_id
Uuid locator_id
struct LocatorRetiredEvent
#include <postproject.hpp>

Public Members

Uuid resource_id
Uuid locator_id
struct MediaRoot
#include <postproject.hpp>

Public Members

Uuid id
std::string name
std::optional<std::string> label
std::optional<std::string> legacy_uri
std::int32_t priority
bool enabled
struct MediaRootAddedEvent
#include <postproject.hpp>

Public Members

Uuid media_root_id
struct MediaRootEnabledChangedEvent
#include <postproject.hpp>

Public Members

Uuid media_root_id
bool enabled
struct MediaRootMapping
#include <postproject.hpp>

Public Members

std::string name
std::string directory
struct MediaRootRemovedEvent
#include <postproject.hpp>

Public Members

Uuid media_root_id
struct MetadataAddedOrReplacedEvent
#include <postproject.hpp>

Public Members

ObjectRef target
std::string vocabulary
std::string property
struct MetadataFieldInput
#include <postproject.hpp>

Public Members

std::string name
MetadataInput value
class MetadataInput
#include <postproject.hpp>

Public Functions

MetadataInput(const MetadataInput&) = delete
MetadataInput &operator=(const MetadataInput&) = delete
inline MetadataInput(MetadataInput &&other) noexcept
inline MetadataInput &operator=(MetadataInput &&other) noexcept
inline ~MetadataInput()

Public Static Functions

static inline MetadataInput plainString(std::string_view value)
static inline MetadataInput languageString(std::string_view value, std::string_view language)
static inline MetadataInput signedInteger(std::int64_t value)
static inline MetadataInput unsignedInteger(std::uint64_t value)
static inline MetadataInput decimal(std::string_view coefficient, std::uint32_t scale)
static inline MetadataInput boolean(bool value)
static inline MetadataInput timestamp(std::int64_t unix_micros)
static inline MetadataInput uri(std::string_view value)
static inline MetadataInput bytes(const std::vector<std::uint8_t> &value)
static inline MetadataInput rational(std::int64_t numerator, std::uint64_t denominator)
static inline MetadataInput reference(const ObjectRef &target)
static inline MetadataInput list(const std::vector<MetadataInput> &items)
static inline MetadataInput structure(const std::vector<MetadataFieldInput> &fields)

Private Functions

inline explicit MetadataInput(pp_metadata_input_t *input) noexcept

Private Members

pp_metadata_input_t *input_

Private Static Functions

static inline MetadataInput checked(pp_error_code_t status, pp_metadata_input_t *input, pp_error_t *error)

Friends

friend class Transaction
struct MetadataRemovedEvent
#include <postproject.hpp>

Public Members

ObjectRef target
std::string vocabulary
std::string property
struct ObjectRef
#include <postproject.hpp>

Public Members

ObjectKind kind
Uuid id

Friends

inline friend constexpr bool operator==(const ObjectRef &left, const ObjectRef &right) noexcept
struct OriginIdentity
#include <postproject.hpp>

Public Members

std::string name
std::optional<std::string> version
std::optional<std::string> uri
class Production
#include <postproject.hpp>

Public Functions

Production(const Production&) = delete
Production &operator=(const Production&) = delete
inline Production(Production &&other) noexcept
inline Production &operator=(Production &&other) noexcept
inline ~Production()
inline Uuid id() const
inline bool containsAsset(const Uuid &asset_id) const
inline std::vector<Asset> assets() const
inline std::vector<MediaRoot> mediaRoots() const
inline std::vector<Representation> representations(const Uuid &asset_id) const
inline std::vector<ExternalIdentifier> externalIdentifiers(const ObjectRef &target) const
inline std::vector<ObjectRef> findByExternalIdentifier(std::string_view scheme, std::string_view value) const
inline std::vector<RepresentationResolution> resolveAsset(const Uuid &asset_id, const std::vector<MediaRootMapping> &root_mappings = {}) const
inline std::vector<Activity> activities() const
inline std::vector<Activity> activitiesProducing(const Uuid &representation_id) const
inline std::vector<Activity> activitiesConsuming(const Uuid &representation_id) const
inline std::vector<Uuid> ancestors(const Uuid &representation_id) const
inline std::vector<Uuid> descendants(const Uuid &representation_id) const
inline std::optional<Revision> latestRevision() const
inline std::vector<Revision> changesSince(std::uint64_t sequence, std::uint32_t limit = 100) const
inline std::vector<RevisionEvent> revisionEvents(const Uuid &revision_id) const
inline Transaction beginTransaction()
inline explicit operator bool() const noexcept

Public Static Functions

static inline Production create(std::string_view path)
static inline Production create(std::string_view path, std::string_view display_name)
static inline Production open(std::string_view path)

Private Types

using ActivityQuery = pp_error_code_t (*)(const pp_production_t*, const pp_uuid_t*, pp_activity_set_t**, pp_error_t**)
using ProvenanceQuery = pp_error_code_t (*)(const pp_production_t*, const pp_uuid_t*, pp_object_ref_set_t**, pp_error_t**)

Private Functions

inline explicit Production(pp_production_t *production) noexcept
inline std::vector<Activity> activities_for_representation(const Uuid &representation_id, ActivityQuery query) const
inline std::vector<Uuid> provenance_relatives(const Uuid &representation_id, ProvenanceQuery query) const

Private Members

pp_production_t *production_ = nullptr

Private Static Functions

static inline Production create_impl(std::string_view path, const char *display_name)
struct Representation
#include <postproject.hpp>

Public Members

Uuid id
Uuid asset_id
RepresentationKind kind
ContentStructureKind structure_kind
std::vector<RepresentationMember> members
std::optional<ImageSequenceDescriptor> image_sequence
std::vector<Fingerprint> fingerprints
std::vector<Resource> resources
struct RepresentationAddedEvent
#include <postproject.hpp>

Public Members

Uuid asset_id
Uuid representation_id
struct RepresentationMember
#include <postproject.hpp>

Public Members

Uuid resource_id
std::optional<std::string> role
bool required
struct RepresentationResolution
#include <postproject.hpp>

Public Members

Uuid representation_id
RepresentationAvailability availability
std::vector<ResourceResolution> resources
std::vector<AvailabilityIssue> issues
struct RepresentationResourceAddedEvent
#include <postproject.hpp>

Public Members

Uuid representation_id
Uuid resource_id
std::uint32_t structural_position
struct ResolutionCandidate
#include <postproject.hpp>

Public Members

std::string uri
std::uint16_t confidence_basis_points
std::vector<Evidence> evidence
struct Resource
#include <postproject.hpp>

Public Members

Uuid id
std::optional<std::uint64_t> file_size
std::optional<std::int64_t> modified_at_unix_micros
std::vector<Fingerprint> fingerprints
std::vector<Locator> locators
struct ResourceAddedEvent
#include <postproject.hpp>

Public Members

Uuid resource_id
struct ResourceResolution
#include <postproject.hpp>

Public Members

Uuid resource_id
ResourceResolutionState state
std::vector<ResolutionCandidate> candidates
std::vector<Evidence> evidence
struct Revision
#include <postproject.hpp>

Public Members

Uuid id
std::uint64_t sequence
Uuid transaction_id
std::int64_t committed_at_unix_micros
std::optional<OriginIdentity> origin
std::optional<std::string> message
struct RevisionContext
#include <postproject.hpp>

Public Members

std::optional<OriginIdentity> origin
std::optional<std::string> message
struct RevisionEvent
#include <postproject.hpp>

Public Members

std::uint32_t position
RevisionEventPayload payload
struct ToolIdentity
#include <postproject.hpp>

Public Members

std::string name
std::optional<std::string> version
std::optional<std::string> uri
class Transaction
#include <postproject.hpp>

Public Functions

inline void setRevisionContext(const RevisionContext &context)
inline Uuid importMedia(std::string_view path)
inline Uuid importMedia(std::string_view path, std::string_view display_name)
inline Uuid addSingleFileRepresentation(const Uuid &asset_id, RepresentationKind kind, std::string_view path)
inline Uuid addImageSequenceRepresentation(const Uuid &asset_id, RepresentationKind kind, const ImageSequenceInput &input)
inline Uuid addOrderedPartsRepresentation(const Uuid &asset_id, RepresentationKind kind, const std::vector<FileResourceInput> &members)
inline Uuid addPackageRepresentation(const Uuid &asset_id, RepresentationKind kind, const std::vector<FileResourceInput> &members)
inline Uuid addMediaRoot(std::string_view name, std::int32_t priority = 0)
inline Uuid addMediaRoot(std::string_view name, std::string_view label, std::int32_t priority = 0)
inline void setMediaRootEnabled(const Uuid &root_id, bool enabled)
inline void removeMediaRoot(const Uuid &root_id)
inline void confirmLocator(const Uuid &resource_id, std::string_view uri)
inline void retireLocator(const Uuid &locator_id)
inline void addExternalIdentifier(const ObjectRef &target, const ExternalIdentifier &identifier)
inline void removeExternalIdentifier(const ObjectRef &target, const ExternalIdentifier &identifier)
inline void addMetadataValue(const ObjectRef &target, std::string_view vocabulary, std::string_view property, const MetadataInput &input)
inline Uuid createActivity(const ActivitySpec &spec)
inline void commit()
inline void rollback()
Transaction(const Transaction&) = delete
Transaction &operator=(const Transaction&) = delete
inline Transaction(Transaction &&other) noexcept
inline Transaction &operator=(Transaction &&other) noexcept
inline ~Transaction()
inline explicit operator bool() const noexcept

Private Functions

inline explicit Transaction(pp_transaction_t *transaction) noexcept
inline Uuid import_media_impl(std::string_view path, const char *display_name)
inline Uuid add_media_root_impl(std::string_view name, const char *label, std::int32_t priority)
inline Uuid add_file_collection_representation(const Uuid &asset_id, RepresentationKind kind, const std::vector<FileResourceInput> &members, bool package)
inline void mutate_external_identifier(bool remove, const ObjectRef &target, const ExternalIdentifier &identifier)

Private Members

pp_transaction_t *transaction_ = nullptr

Private Static Functions

static inline std::string checked_origin_name(const OriginIdentity &origin)

Friends

friend class Production
class Uuid
#include <postproject.hpp>

Public Types

using Bytes = std::array<std::uint8_t, 16>

Public Functions

inline explicit constexpr Uuid(Bytes bytes) noexcept
inline constexpr const Bytes &bytes() const noexcept

Private Members

Bytes bytes_

Friends

inline friend constexpr bool operator==(const Uuid &left, const Uuid &right) noexcept
inline friend constexpr bool operator!=(const Uuid &left, const Uuid &right) noexcept
namespace detail

Typedefs

using ErrorHandle = std::unique_ptr<pp_error_t, ErrorDeleter>
using AssetSetHandle = std::unique_ptr<pp_asset_set_t, AssetSetDeleter>
using MediaRootSetHandle = std::unique_ptr<pp_media_root_set_t, MediaRootSetDeleter>
using ResolutionSetHandle = std::unique_ptr<pp_resolution_set_t, ResolutionSetDeleter>
using RepresentationSetHandle = std::unique_ptr<pp_representation_set_t, RepresentationSetDeleter>
using ExternalIdentifierSetHandle = std::unique_ptr<pp_external_identifier_set_t, ExternalIdentifierSetDeleter>
using ObjectRefSetHandle = std::unique_ptr<pp_object_ref_set_t, ObjectRefSetDeleter>
using ActivitySetHandle = std::unique_ptr<pp_activity_set_t, ActivitySetDeleter>
using RevisionSetHandle = std::unique_ptr<pp_revision_set_t, RevisionSetDeleter>
using RevisionEventSetHandle = std::unique_ptr<pp_revision_event_set_t, RevisionEventSetDeleter>
using HostBindingHandle = std::unique_ptr<char, HostBindingDeleter>

Functions

inline void throw_if_error(pp_error_code_t status, pp_error_t *raw_error)
inline std::string checked_string(std::string_view value, std::string_view label)
inline Uuid uuid(const pp_uuid_t &value)
inline pp_uuid_t native_uuid(const Uuid &value)
inline ObjectRef object_ref(const pp_object_ref_t &value)
inline pp_object_ref_t native_object_ref(const ObjectRef &value)
inline std::optional<std::string> optional_string(const char *value)
inline std::optional<std::string> checked_optional_string(const std::optional<std::string> &value, std::string_view label)
inline Fingerprint representation_fingerprint(const pp_representation_set_t *representations, std::uint64_t representation_index, std::uint64_t fingerprint_index)
inline Fingerprint resource_fingerprint(const pp_representation_set_t *representations, std::uint64_t representation_index, std::uint64_t resource_index, std::uint64_t fingerprint_index)
inline Representation representation(const pp_representation_set_t *representations, std::uint64_t index)
inline Activity activity(const pp_activity_set_t *activities, std::uint64_t index)
inline Revision revision(const pp_revision_set_t *revisions, std::uint64_t index)
inline std::string required_event_string(const char *value, std::string_view label)
inline RevisionEvent revision_event(const pp_revision_event_set_t *events, std::uint64_t index)
inline Evidence resource_evidence(const pp_resolution_set_t *resolutions, std::uint64_t representation_index, std::uint64_t resource_index, std::uint64_t evidence_index)
inline Evidence candidate_evidence(const pp_resolution_set_t *resolutions, std::uint64_t representation_index, std::uint64_t resource_index, std::uint64_t candidate_index, std::uint64_t evidence_index)
struct ActivitySetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_activity_set_t *activities) const noexcept
struct AssetSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_asset_set_t *assets) const noexcept
struct ErrorDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_error_t *error) const noexcept
struct ExternalIdentifierSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_external_identifier_set_t *identifiers) const noexcept
struct HostBindingDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(char *binding) const noexcept
struct MediaRootSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_media_root_set_t *roots) const noexcept
struct ObjectRefSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_object_ref_set_t *objects) const noexcept
struct RepresentationSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_representation_set_t *representations) const noexcept
struct ResolutionSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_resolution_set_t *resolutions) const noexcept
struct RevisionEventSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_revision_event_set_t *events) const noexcept
struct RevisionSetDeleter
#include <postproject.hpp>

Public Functions

inline void operator()(pp_revision_set_t *revisions) const noexcept