Arachne 1.0
Arachne - the perpetual stitcher of Wikidata entities.
Loading...
Searching...
No Matches
arachnespace::contracts Namespace Reference

Namespaces

namespace  anonymous_namespace{contracts.cpp}

Classes

struct  diagnostic
struct  validation_result

Enumerations

enum class  contract_name {
  arachne_batch , batch_envelope , fetch_plan , fetch_request ,
  acquired_artifact , research_candidate_graph_plan , product_graph_snapshot , research_candidate_graph_snapshot ,
  viewer_projection , site_bundle
}

Functions

std::string_view to_string (contract_name name) noexcept
std::optional< contract_nameparse_contract_name (std::string_view name) noexcept
bool is_artifact_bearing (contract_name name) noexcept
validation_result validate (const nlohmann::json &document)
validation_result validate (contract_name expected, const nlohmann::json &document)
std::string canonical_json (const nlohmann::json &document)
validation_result validate (const json &document)
validation_result validate (const contract_name expected, const json &document)
std::string canonical_json (const json &document)

Enumeration Type Documentation

◆ contract_name

Supported active actor-boundary and product-inbox contracts.

Enumerator
arachne_batch 
batch_envelope 
fetch_plan 
fetch_request 
acquired_artifact 
research_candidate_graph_plan 
product_graph_snapshot 
research_candidate_graph_snapshot 
viewer_projection 
site_bundle 

Definition at line 14 of file contracts.hpp.

Function Documentation

◆ canonical_json() [1/2]

std::string arachnespace::contracts::canonical_json ( const json & document)

Definition at line 2547 of file contracts.cpp.

2547 {
2548 reject_non_finite(document, "");
2549 return document.dump(
2550 -1, ' ', false, nlohmann::json::error_handler_t::strict
2551 );
2552}

◆ canonical_json() [2/2]

std::string arachnespace::contracts::canonical_json ( const nlohmann::json & document)
nodiscard

Serialize JSON deterministically: object keys are lexicographically ordered, arrays retain their declared order, UTF-8 is retained, and no insignificant whitespace is emitted.

Exceptions
std::invalid_argumentfor discarded or non-finite JSON values.

◆ is_artifact_bearing()

bool arachnespace::contracts::is_artifact_bearing ( contract_name name)
nodiscardnoexcept

Whether the contract necessarily carries or references artifact bytes.

Definition at line 2507 of file contracts.cpp.

References acquired_artifact, arachne_batch, batch_envelope, fetch_plan, fetch_request, product_graph_snapshot, research_candidate_graph_plan, research_candidate_graph_snapshot, site_bundle, and viewer_projection.

◆ parse_contract_name()

std::optional< contract_name > arachnespace::contracts::parse_contract_name ( std::string_view name)
nodiscardnoexcept

Parse an exact, currently supported wire name.

Definition at line 2496 of file contracts.cpp.

2496 {
2497 const auto it
2498 = std::ranges::find_if(contract_names, [name](const auto& item) {
2499 return item.first == name;
2500 });
2501 if (it == contract_names.end()) {
2502 return std::nullopt;
2503 }
2504 return it->second;
2505}

◆ to_string()

std::string_view arachnespace::contracts::to_string ( contract_name name)
nodiscardnoexcept

Return the canonical wire name, including its major-version suffix.

Definition at line 2487 of file contracts.cpp.

2487 {
2488 const auto it
2489 = std::ranges::find_if(contract_names, [name](const auto& item) {
2490 return item.second == name;
2491 });
2492 return it == contract_names.end() ? std::string_view {} : it->first;
2493}

◆ validate() [1/4]

validation_result arachnespace::contracts::validate ( const contract_name expected,
const json & document )

Definition at line 2536 of file contracts.cpp.

2536 {
2537 validation_result result;
2538 if (!document.is_object()) {
2539 add(result, "", "type", "contract document must be a JSON object");
2540 return result;
2541 }
2542 validate_header(expected, document, result);
2543 validate_body(expected, document, result);
2544 return result;
2545}

◆ validate() [2/4]

validation_result arachnespace::contracts::validate ( const json & document)

Definition at line 2525 of file contracts.cpp.

2525 {
2526 validation_result result;
2527 const auto name = inspect_contract(document, result);
2528 if (!name.has_value()) {
2529 return result;
2530 }
2531 validate_header(*name, document, result);
2532 validate_body(*name, document, result);
2533 return result;
2534}

◆ validate() [3/4]

validation_result arachnespace::contracts::validate ( const nlohmann::json & document)
nodiscard

Validate a document after discovering its type from contract, or from format for an Arachne product-inbox batch.

◆ validate() [4/4]

validation_result arachnespace::contracts::validate ( contract_name expected,
const nlohmann::json & document )
nodiscard

Validate a document and require the supplied contract type.