Skip to main content

gestalt/
lib.rs

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}