use crate::ConversationAudience;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Placement {
Local,
Cloud,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct FrontendProvider {
pub provider: String,
pub deprecated: bool,
pub supported_placements: Vec<Placement>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderListRequest {
pub placement: Placement,
pub frontend_providers: Vec<FrontendProvider>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderMetadata {
pub provider: String,
pub display_name: String,
pub placement: Placement,
pub deprecated: bool,
pub available: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub disabled_reason: Option<String>,
pub setup_flow: String,
pub audiences: Vec<ConversationAudience>,
pub inbound_capabilities: Vec<ContentCapability>,
pub outbound_capabilities: Vec<ContentCapability>,
pub delivery_mode: DeliveryMode,
pub management_operations: Vec<ManagementOperation>,
pub provider_data: Value,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ContentCapability {
Text,
Markdown,
Image,
Audio,
Video,
File,
Action,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DeliveryMode {
Unrestricted,
SessionWindow,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub enum ManagementOperation {
#[serde(rename = "provider_account.list")]
ProviderAccountList,
#[serde(rename = "provider_account.update")]
ProviderAccountUpdate,
#[serde(rename = "provider_account.delete")]
ProviderAccountDelete,
#[serde(rename = "provider_account.test")]
ProviderAccountTest,
#[serde(rename = "provider_account.status")]
ProviderAccountStatus,
#[serde(rename = "account_grant.create")]
AccountGrantCreate,
#[serde(rename = "account_grant.delete")]
AccountGrantDelete,
#[serde(rename = "account_grant.list")]
AccountGrantList,
#[serde(rename = "route.list")]
RouteList,
#[serde(rename = "route.update")]
RouteUpdate,
#[serde(rename = "route.delete")]
RouteDelete,
#[serde(rename = "setup.options")]
SetupOptions,
#[serde(rename = "setup.start")]
SetupStart,
#[serde(rename = "setup.status")]
SetupStatus,
#[serde(rename = "surface.list")]
SurfaceList,
#[serde(rename = "surface.dismiss")]
SurfaceDismiss,
#[serde(rename = "surface.bind_code.create")]
SurfaceBindCodeCreate,
#[serde(rename = "actor.link_code.create")]
ActorLinkCodeCreate,
#[serde(rename = "actor.link.list")]
ActorLinkList,
#[serde(rename = "actor.link.delete")]
ActorLinkDelete,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderListResponse {
pub providers: Vec<ProviderMetadata>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderPlacementRequest {
pub provider: String,
pub placement: Placement,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountUpdateRequest {
pub provider: String,
pub placement: Placement,
pub account_id: String,
pub data: Value,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountRequest {
pub provider: String,
pub placement: Placement,
pub account_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountTestRequest {
pub provider: String,
pub placement: Placement,
pub data: Value,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum ProviderAccountOwnership {
System,
User,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccount {
pub provider: String,
pub placement: Placement,
pub account_id: String,
pub ownership: ProviderAccountOwnership,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub enabled: bool,
pub status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status_message: Option<String>,
pub provider_data: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountListResponse {
pub accounts: Vec<ProviderAccount>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountUpdateResponse {
pub account: ProviderAccount,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountTestResponse {
pub result: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderStatus {
pub provider: String,
pub placement: Placement,
pub enabled: bool,
pub provider_data: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ProviderAccountStatusResponse {
pub status: ProviderStatus,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct MutationResponse {
pub success: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct AccountGrantRequest {
pub provider: String,
pub placement: Placement,
pub account_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct AccountGrant {
pub provider: String,
pub placement: Placement,
pub account_id: String,
pub tenant_id: String,
pub scope_id: String,
pub user_id: String,
pub default: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct AccountGrantListResponse {
pub grants: Vec<AccountGrant>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RouteListRequest {
pub provider: String,
pub placement: Placement,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub audience: Option<ConversationAudience>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RouteRequest {
pub provider: String,
pub placement: Placement,
pub route_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RouteUpdateRequest {
pub provider: String,
pub placement: Placement,
pub route_id: String,
pub scope_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(
tag = "audience",
rename_all = "lowercase",
rename_all_fields = "camelCase",
deny_unknown_fields
)]
pub enum MessagingRoute {
Personal {
provider: String,
placement: Placement,
route_id: String,
account_id: String,
conversation_id: String,
external_actor_id: String,
tenant_id: String,
user_id: String,
scope_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
display_name: Option<String>,
enabled: bool,
provider_data: Value,
},
Shared {
provider: String,
placement: Placement,
route_id: String,
account_id: String,
conversation_id: String,
tenant_id: String,
scope_id: String,
bound_by_user_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
display_name: Option<String>,
enabled: bool,
provider_data: Value,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RouteListResponse {
pub routes: Vec<MessagingRoute>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct RouteUpdateResponse {
pub route: MessagingRoute,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupStartRequest {
pub provider: String,
pub placement: Placement,
pub data: Value,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupOptionsResponse {
pub options: Value,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupStatusRequest {
pub provider: String,
pub placement: Placement,
pub setup_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupAction {
#[serde(rename = "type")]
pub kind: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupState {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub setup_id: Option<String>,
pub status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expires_at_ms: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub action: Option<SetupAction>,
pub provider_data: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub route_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SetupResponse {
pub setup: SetupState,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum SurfaceState {
Pending,
Bound,
Dismissed,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SurfaceListRequest {
pub provider: String,
pub placement: Placement,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub state: Option<SurfaceState>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct MessagingSurface {
pub provider: String,
pub placement: Placement,
pub account_id: String,
pub surface_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub state: SurfaceState,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub scope_id: Option<String>,
pub first_seen_at_ms: i64,
pub last_seen_at_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SurfaceListResponse {
pub surfaces: Vec<MessagingSurface>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SurfaceRequest {
pub provider: String,
pub placement: Placement,
pub surface_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct SurfaceBindCodeCreateRequest {
pub provider: String,
pub placement: Placement,
pub surface_id: String,
pub scope_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ActorLinkCodeCreateRequest {
pub provider: String,
pub placement: Placement,
pub account_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ChallengeCode {
pub code: String,
pub command: String,
pub expires_at_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ChallengeCodeResponse {
pub challenge: ChallengeCode,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ActorLinkListRequest {
pub provider: String,
pub placement: Placement,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub account_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ActorLinkView {
pub link_id: String,
pub provider: String,
pub placement: Placement,
pub account_id: String,
pub external_user_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_name: Option<String>,
pub created_at_ms: i64,
pub updated_at_ms: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ActorLinkListResponse {
pub links: Vec<ActorLinkView>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase", deny_unknown_fields)]
pub struct ActorLinkDeleteRequest {
pub provider: String,
pub placement: Placement,
pub link_id: String,
}