A11 (C++ runtime)
Native C++ implementation of the A11 action and streaming runtime
Loading...
Searching...
No Matches
schema.h
Go to the documentation of this file.
1// Copyright 2026 The A11 Authors.
2
17#ifndef A11_ACTIONS_SCHEMA_H_
18#define A11_ACTIONS_SCHEMA_H_
19
20#include <memory>
21#include <optional>
22#include <string>
23#include <string_view>
24#include <vector>
25
26#include <absl/container/flat_hash_map.h>
27#include <absl/status/status.h>
28#include <absl/status/statusor.h>
29
30#include "a11/data/types.h"
31
32namespace a11::actions {
33
35inline constexpr std::string_view kActionStatusMimetype =
36 "application/x-a11-status";
38inline constexpr std::string_view kActionStatusOutput = "__status__";
40inline constexpr std::string_view kActionDispatchStatusOutput =
41 "__dispatch_status__";
43inline constexpr std::string_view kCancelActionName = "__cancel__";
45inline constexpr std::string_view kCancelActionHeader = "__action";
47inline constexpr std::string_view kActionHeaderPrefix = "x-a11-";
48
59 std::string name;
60 std::string type;
61 std::string description;
62 bool required = false;
63 bool unary = false;
65 std::vector<std::optional<data::NodeFragment>> autofills;
66
74 std::shared_ptr<void> typeinfo;
75
77 absl::Status Validate() const;
78 friend bool operator==(const ActionPortSchema&,
79 const ActionPortSchema&) = default;
80};
81
89 std::string name;
90 std::string description;
91 std::optional<data::Bytes> default_value;
92
94 absl::Status Validate() const;
95 friend bool operator==(const ActionHeaderSchema&,
96 const ActionHeaderSchema&) = default;
97};
98
108 static constexpr std::string_view kWholeJson = "$";
109
110 std::string name;
111 std::string description;
112 absl::flat_hash_map<std::string, ActionPortSchema> inputs;
113 absl::flat_hash_map<std::string, ActionPortSchema>
115 absl::flat_hash_map<std::string, ActionHeaderSchema> headers;
117 absl::flat_hash_map<std::string, std::string> output_to_json_field;
118
120 absl::Status Validate() const;
126 absl::Status MapOutputToJson(std::string output_name,
127 std::string field_name = {});
128
129 friend bool operator==(const ActionSchema&, const ActionSchema&) = default;
130};
131
146
147 friend bool operator==(const ActionSettings&,
148 const ActionSettings&) = default;
149};
150
152absl::StatusOr<data::Chunk> StatusToChunk(const absl::Status& status);
154absl::StatusOr<absl::Status> StatusFromChunk(const data::Chunk& chunk);
156bool IsStatusChunk(const data::Chunk& chunk);
157
158} // namespace a11::actions
159
160#endif // A11_ACTIONS_SCHEMA_H_
Definition action.cc:46
constexpr std::string_view kActionStatusMimetype
Mimetype marking a chunk that carries an action status.
Definition schema.h:35
bool IsStatusChunk(const data::Chunk &chunk)
Whether chunk carries an encoded action status.
Definition schema.cc:157
constexpr std::string_view kActionDispatchStatusOutput
Reserved output port name carrying the remote dispatch status.
Definition schema.h:40
constexpr std::string_view kActionStatusOutput
Reserved output port name carrying the action's completion status.
Definition schema.h:38
constexpr std::string_view kActionHeaderPrefix
Prefix reserved for A11's framework headers.
Definition schema.h:47
absl::StatusOr< absl::Status > StatusFromChunk(const data::Chunk &chunk)
Decodes a status previously encoded by StatusToChunk.
Definition schema.cc:141
constexpr std::string_view kCancelActionHeader
Header naming the action targeted by a cancel request.
Definition schema.h:45
constexpr std::string_view kCancelActionName
Reserved action name used to signal cancellation to a peer.
Definition schema.h:43
absl::StatusOr< data::Chunk > StatusToChunk(const absl::Status &status)
Encodes a status as a chunk (mimetype kActionStatusMimetype).
Definition schema.cc:130
Schema for a single header an action accepts.
Definition schema.h:88
std::string description
Human-readable description.
Definition schema.h:90
friend bool operator==(const ActionHeaderSchema &, const ActionHeaderSchema &)=default
std::string name
Header name.
Definition schema.h:89
absl::Status Validate() const
Validates the header schema.
Definition schema.cc:35
std::optional< data::Bytes > default_value
Value used when omitted.
Definition schema.h:91
Schema for a single input or output port of an action.
Definition schema.h:58
bool unary
Whether the port carries a single value.
Definition schema.h:63
absl::Status Validate() const
Validates the port schema.
Definition schema.cc:21
std::string type
Payload type name.
Definition schema.h:60
std::shared_ptr< void > typeinfo
Opaque, owning language-binding type handle (e.g.
Definition schema.h:74
bool required
Whether the port must be supplied.
Definition schema.h:62
std::string description
Human-readable description.
Definition schema.h:61
std::string name
Port name (unique within its direction).
Definition schema.h:59
std::vector< std::optional< data::NodeFragment > > autofills
Input-default fragments; an autofilled input must otherwise be empty.
Definition schema.h:65
friend bool operator==(const ActionPortSchema &, const ActionPortSchema &)=default
The full typed interface of an action.
Definition schema.h:107
absl::Status MapOutputToJson(std::string output_name, std::string field_name={})
Maps an output port onto a JSON result field.
Definition schema.cc:102
static constexpr std::string_view kWholeJson
Whole-JSON target.
Definition schema.h:108
absl::flat_hash_map< std::string, ActionPortSchema > inputs
Input ports.
Definition schema.h:112
friend bool operator==(const ActionSchema &, const ActionSchema &)=default
absl::flat_hash_map< std::string, ActionHeaderSchema > headers
Headers.
Definition schema.h:115
absl::flat_hash_map< std::string, ActionPortSchema > outputs
Output ports.
Definition schema.h:114
std::string description
Human-readable description.
Definition schema.h:111
absl::flat_hash_map< std::string, std::string > output_to_json_field
Maps output port names to JSON result fields.
Definition schema.h:117
std::string name
Action name.
Definition schema.h:110
absl::Status Validate() const
Validates the schema and all of its ports and headers.
Definition schema.cc:39
Per-action runtime settings for stream binding and cleanup.
Definition schema.h:139
bool clear_inputs_after_run
Release inputs after each run.
Definition schema.h:144
friend bool operator==(const ActionSettings &, const ActionSettings &)=default
std::optional< bool > bind_streams_on_outputs_by_default
Bind output port streams by default when unset per-port.
Definition schema.h:143
std::optional< bool > bind_streams_on_inputs_by_default
Bind input port streams by default when unset per-port.
Definition schema.h:141
bool clear_outputs_after_run
Release outputs after each run.
Definition schema.h:145
A unit of data: bytes plus optional descriptive metadata.
Definition types.h:95
A11's core wire value types: chunks, node fragments and messages.