use crate::app::{
AccessContext, AgentInvocationContext, AgentToolRef, AppInvokeGraphQLRequest, AppInvokeRequest,
Catalog, CatalogOperation, CatalogParameter, ConnectionParamDef, CredentialContext,
ExecuteRequest, GetSessionCatalogRequest, GetSessionCatalogResponse, HTTPSubjectRequest,
HostContext, InvocationContext, OperationAnnotations, OperationResult, ProviderContext,
ProviderMetadata, RequestContext, RequestMetaContext, ResolveHTTPSubjectRequest,
ResolveHTTPSubjectResponse, StartProviderRequest, StartProviderResponse, StringList,
SubjectContext, SubjectPermissionContext,
};
use crate::codec::support::{from_wire_value, to_wire_struct};
use crate::generated::v1;
pub(crate) fn to_wire_access_context(value: AccessContext) -> v1::AccessContext {
v1::AccessContext {
policy: value.policy,
role: value.role,
}
}
pub(crate) fn to_wire_agent_invocation_context(
value: AgentInvocationContext,
) -> v1::AgentInvocationContext {
v1::AgentInvocationContext {
provider_name: value.provider_name,
session_id: value.session_id,
turn_id: value.turn_id,
}
}
pub(crate) fn to_wire_agent_tool_ref(value: AgentToolRef) -> v1::AgentToolRef {
v1::AgentToolRef {
app: value.app,
operation: value.operation,
connection: value.connection,
instance: value.instance,
title: value.title,
description: value.description,
credential_mode: value.credential_mode,
system: value.system,
run_as: value.run_as.map(to_wire_subject_context),
}
}
pub(crate) fn from_wire_agent_tool_ref(value: v1::AgentToolRef) -> AgentToolRef {
AgentToolRef {
app: value.app,
operation: value.operation,
connection: value.connection,
instance: value.instance,
title: value.title,
description: value.description,
credential_mode: value.credential_mode,
system: value.system,
run_as: value.run_as.map(from_wire_subject_context),
}
}
pub(crate) fn to_wire_app_invoke_graphql_request(
value: AppInvokeGraphQLRequest,
) -> v1::AppInvokeGraphQlRequest {
v1::AppInvokeGraphQlRequest {
app: value.app,
document: value.document,
variables: value.variables.map(to_wire_struct),
connection: value.connection,
instance: value.instance,
idempotency_key: value.idempotency_key,
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn to_wire_app_invoke_request(value: AppInvokeRequest) -> v1::AppInvokeRequest {
v1::AppInvokeRequest {
app: value.app,
operation: value.operation,
params: value.params.map(to_wire_struct),
connection: value.connection,
instance: value.instance,
idempotency_key: value.idempotency_key,
credential_mode: value.credential_mode,
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn from_wire_catalog(value: v1::Catalog) -> Catalog {
Catalog {
name: value.name,
display_name: value.display_name,
description: value.description,
icon_svg: value.icon_svg,
operations: value
.operations
.into_iter()
.map(from_wire_catalog_operation)
.collect(),
}
}
pub(crate) fn from_wire_catalog_operation(value: v1::CatalogOperation) -> CatalogOperation {
CatalogOperation {
id: value.id,
method: value.method,
title: value.title,
description: value.description,
input_schema: value.input_schema,
output_schema: value.output_schema,
annotations: value.annotations.map(from_wire_operation_annotations),
parameters: value
.parameters
.into_iter()
.map(from_wire_catalog_parameter)
.collect(),
required_scopes: value.required_scopes,
tags: value.tags,
read_only: value.read_only,
visible: value.visible,
transport: value.transport,
allowed_roles: value.allowed_roles,
}
}
pub(crate) fn from_wire_catalog_parameter(value: v1::CatalogParameter) -> CatalogParameter {
CatalogParameter {
name: value.name,
r#type: value.r#type,
description: value.description,
required: value.required,
default: value.default.map(from_wire_value),
}
}
pub(crate) fn from_wire_connection_param_def(value: v1::ConnectionParamDef) -> ConnectionParamDef {
ConnectionParamDef {
required: value.required,
description: value.description,
default_value: value.default_value,
from: value.from,
field: value.field,
}
}
pub(crate) fn to_wire_credential_context(value: CredentialContext) -> v1::CredentialContext {
v1::CredentialContext {
mode: value.mode,
subject_id: value.subject_id,
connection: value.connection,
instance: value.instance,
}
}
pub(crate) fn to_wire_execute_request(value: ExecuteRequest) -> v1::ExecuteRequest {
v1::ExecuteRequest {
operation: value.operation,
params: value.params.map(to_wire_struct),
token: value.token,
connection_params: value.connection_params,
invocation_id: value.invocation_id,
context: value.context.map(to_wire_request_context),
idempotency_key: value.idempotency_key,
}
}
pub(crate) fn to_wire_get_session_catalog_request(
value: GetSessionCatalogRequest,
) -> v1::GetSessionCatalogRequest {
v1::GetSessionCatalogRequest {
token: value.token,
connection_params: value.connection_params,
invocation_id: value.invocation_id,
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn from_wire_get_session_catalog_response(
value: v1::GetSessionCatalogResponse,
) -> GetSessionCatalogResponse {
GetSessionCatalogResponse {
catalog: value.catalog.map(from_wire_catalog),
}
}
pub(crate) fn to_wire_http_subject_request(value: HTTPSubjectRequest) -> v1::HttpSubjectRequest {
v1::HttpSubjectRequest {
binding: value.binding,
method: value.method,
path: value.path,
content_type: value.content_type,
headers: value
.headers
.into_iter()
.map(|(key, item)| (key, to_wire_string_list(item)))
.collect(),
query: value
.query
.into_iter()
.map(|(key, item)| (key, to_wire_string_list(item)))
.collect(),
params: value.params.map(to_wire_struct),
raw_body: value.raw_body,
security_scheme: value.security_scheme,
verified_subject: value.verified_subject,
verified_claims: value.verified_claims,
}
}
pub(crate) fn to_wire_host_context(value: HostContext) -> v1::HostContext {
v1::HostContext {
public_base_url: value.public_base_url,
}
}
pub(crate) fn to_wire_invocation_context(value: InvocationContext) -> v1::InvocationContext {
v1::InvocationContext {
request_id: value.request_id,
depth: value.depth,
call_chain: value.call_chain,
surface: value.surface,
internal_connection_access: value.internal_connection_access,
connection: value.connection,
}
}
pub(crate) fn to_wire_operation_annotations(
value: OperationAnnotations,
) -> v1::OperationAnnotations {
v1::OperationAnnotations {
read_only_hint: value.read_only_hint,
idempotent_hint: value.idempotent_hint,
destructive_hint: value.destructive_hint,
open_world_hint: value.open_world_hint,
}
}
pub(crate) fn from_wire_operation_annotations(
value: v1::OperationAnnotations,
) -> OperationAnnotations {
OperationAnnotations {
read_only_hint: value.read_only_hint,
idempotent_hint: value.idempotent_hint,
destructive_hint: value.destructive_hint,
open_world_hint: value.open_world_hint,
}
}
pub(crate) fn from_wire_operation_result(value: v1::OperationResult) -> OperationResult {
OperationResult {
status: value.status,
body: value.body,
headers: value
.headers
.into_iter()
.map(|(key, item)| (key, from_wire_string_list(item)))
.collect(),
}
}
pub(crate) fn to_wire_provider_context(value: ProviderContext) -> v1::ProviderContext {
v1::ProviderContext {
kind: value.kind,
name: value.name,
}
}
pub(crate) fn from_wire_provider_metadata(value: v1::ProviderMetadata) -> ProviderMetadata {
ProviderMetadata {
name: value.name,
display_name: value.display_name,
description: value.description,
connection_mode: value.connection_mode,
auth_types: value.auth_types,
connection_params: value
.connection_params
.into_iter()
.map(|(key, item)| (key, from_wire_connection_param_def(item)))
.collect(),
static_catalog: value.static_catalog.map(from_wire_catalog),
supports_session_catalog: value.supports_session_catalog,
min_protocol_version: value.min_protocol_version,
max_protocol_version: value.max_protocol_version,
}
}
pub(crate) fn to_wire_request_context(value: RequestContext) -> v1::RequestContext {
v1::RequestContext {
subject: value.subject.map(to_wire_subject_context),
credential: value.credential.map(to_wire_credential_context),
access: value.access.map(to_wire_access_context),
workflow: value.workflow.map(to_wire_struct),
host: value.host.map(to_wire_host_context),
agent_subject: value.agent_subject.map(to_wire_subject_context),
caller: value.caller.map(to_wire_provider_context),
invocation: value.invocation.map(to_wire_invocation_context),
tool_refs: value
.tool_refs
.into_iter()
.map(to_wire_agent_tool_ref)
.collect(),
tool_refs_set: value.tool_refs_set,
request_meta: value.request_meta.map(to_wire_request_meta_context),
agent: value.agent.map(to_wire_agent_invocation_context),
}
}
pub(crate) fn to_wire_request_meta_context(value: RequestMetaContext) -> v1::RequestMetaContext {
v1::RequestMetaContext {
client_ip: value.client_ip,
remote_addr: value.remote_addr,
user_agent: value.user_agent,
}
}
pub(crate) fn to_wire_resolve_http_subject_request(
value: ResolveHTTPSubjectRequest,
) -> v1::ResolveHttpSubjectRequest {
v1::ResolveHttpSubjectRequest {
request: value.request.map(to_wire_http_subject_request),
context: value.context.map(to_wire_request_context),
}
}
pub(crate) fn from_wire_resolve_http_subject_response(
value: v1::ResolveHttpSubjectResponse,
) -> ResolveHTTPSubjectResponse {
ResolveHTTPSubjectResponse {
subject: value.subject.map(from_wire_subject_context),
reject_status: value.reject_status,
reject_message: value.reject_message,
}
}
pub(crate) fn to_wire_start_provider_request(
value: StartProviderRequest,
) -> v1::StartProviderRequest {
v1::StartProviderRequest {
name: value.name,
config: value.config.map(to_wire_struct),
protocol_version: value.protocol_version,
}
}
pub(crate) fn from_wire_start_provider_response(
value: v1::StartProviderResponse,
) -> StartProviderResponse {
StartProviderResponse {
protocol_version: value.protocol_version,
}
}
pub(crate) fn to_wire_string_list(value: StringList) -> v1::StringList {
v1::StringList {
values: value.values,
}
}
pub(crate) fn from_wire_string_list(value: v1::StringList) -> StringList {
StringList {
values: value.values,
}
}
pub(crate) fn to_wire_subject_context(value: SubjectContext) -> v1::SubjectContext {
v1::SubjectContext {
id: value.id,
credential_subject_id: value.credential_subject_id,
email: value.email,
display_name: value.display_name,
scopes: value.scopes,
permissions: value
.permissions
.into_iter()
.map(to_wire_subject_permission_context)
.collect(),
}
}
pub(crate) fn from_wire_subject_context(value: v1::SubjectContext) -> SubjectContext {
SubjectContext {
id: value.id,
credential_subject_id: value.credential_subject_id,
email: value.email,
display_name: value.display_name,
scopes: value.scopes,
permissions: value
.permissions
.into_iter()
.map(from_wire_subject_permission_context)
.collect(),
}
}
pub(crate) fn to_wire_subject_permission_context(
value: SubjectPermissionContext,
) -> v1::SubjectPermissionContext {
v1::SubjectPermissionContext {
app: value.app,
operations: value.operations,
all_operations: value.all_operations,
}
}
pub(crate) fn from_wire_subject_permission_context(
value: v1::SubjectPermissionContext,
) -> SubjectPermissionContext {
SubjectPermissionContext {
app: value.app,
operations: value.operations,
all_operations: value.all_operations,
}
}