1#![doc = include_str!("../README.md")]
2
3mod api;
4mod auth;
5mod auth_server;
6mod cache;
7mod cache_server;
8mod catalog;
9mod env;
10mod error;
11mod generated;
12pub mod indexeddb;
13mod provider_server;
14mod router;
15mod rpc_status;
16pub mod runtime;
17mod runtime_server;
18pub mod s3;
19mod secrets;
20mod secrets_server;
21
22pub mod proto {
23 pub use crate::generated::v1;
24}
25
26pub use api::{Access, Credential, Provider, Request, Response, RuntimeMetadata, Subject, ok};
27pub use auth::{
28 AuthProvider, AuthenticatedUser, BeginLoginRequest, BeginLoginResponse, CompleteLoginRequest,
29};
30pub use cache::{
31 Cache, CacheEntry, CacheError, CacheProvider, CacheSetOptions, ENV_CACHE_SOCKET,
32 cache_socket_env,
33};
34pub use catalog::{Catalog, CatalogOperation};
35pub use env::{CURRENT_PROTOCOL_VERSION, ENV_PROVIDER_SOCKET};
36pub use error::{Error, Result};
37pub use indexeddb::{Cursor, CursorDirection, IndexedDB, IndexedDBError};
38#[doc(hidden)]
39pub use provider_server::{OperationResult, ProviderServer};
40pub use router::{Operation, Router};
41pub use s3::{S3, S3Error, S3Provider};
42pub use secrets::SecretsProvider;
43pub use tonic::codegen::async_trait;
44
45#[doc(hidden)]
46pub trait IntoRouterResult<P> {
47 fn into_router_result(self) -> Result<Router<P>>;
48}
49
50impl<P> IntoRouterResult<P> for Router<P> {
51 fn into_router_result(self) -> Result<Router<P>> {
52 Ok(self)
53 }
54}
55
56impl<P> IntoRouterResult<P> for Result<Router<P>> {
57 fn into_router_result(self) -> Result<Router<P>> {
58 self
59 }
60}
61
62#[doc(hidden)]
63pub fn into_router_result<P, R>(router: R) -> Result<Router<P>>
64where
65 R: IntoRouterResult<P>,
66{
67 router.into_router_result()
68}
69
70#[macro_export]
71macro_rules! export_provider {
72 (constructor = $constructor:path, router = $router:path $(,)?) => {
73 pub fn __gestalt_serve(name: &str) -> $crate::Result<()> {
74 let provider = std::sync::Arc::new($constructor());
75 let router = $crate::into_router_result($router())?.with_name(name);
76 $crate::runtime::run_provider(provider, router)
77 }
78
79 pub fn __gestalt_write_catalog(name: &str, path: &str) -> $crate::Result<()> {
80 let router = $crate::into_router_result($router())?.with_name(name);
81 $crate::runtime::write_catalog_path(&router, path)
82 }
83 };
84}
85
86#[macro_export]
87macro_rules! export_auth_provider {
88 (constructor = $constructor:path $(,)?) => {
89 pub fn __gestalt_serve_auth(_name: &str) -> $crate::Result<()> {
90 let provider = std::sync::Arc::new($constructor());
91 $crate::runtime::run_auth_provider(provider)
92 }
93 };
94}
95
96#[macro_export]
97macro_rules! export_cache_provider {
98 (constructor = $constructor:path $(,)?) => {
99 pub fn __gestalt_serve_cache(_name: &str) -> $crate::Result<()> {
100 let provider = std::sync::Arc::new($constructor());
101 $crate::runtime::run_cache_provider(provider)
102 }
103 };
104}
105
106#[macro_export]
107macro_rules! export_secrets_provider {
108 (constructor = $constructor:path $(,)?) => {
109 pub fn __gestalt_serve_secrets(_name: &str) -> $crate::Result<()> {
110 let provider = std::sync::Arc::new($constructor());
111 $crate::runtime::run_secrets_provider(provider)
112 }
113 };
114}
115
116#[macro_export]
117macro_rules! export_s3_provider {
118 (constructor = $constructor:path $(,)?) => {
119 pub fn __gestalt_serve_s3(_name: &str) -> $crate::Result<()> {
120 let provider = std::sync::Arc::new($constructor());
121 $crate::runtime::run_s3_provider(provider)
122 }
123 };
124}