1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
//! This crate contains the core types of the [Ockam][main-ockam-crate-link]
//! library and is intended for use by crates that provide features and add-ons
//! to the main [Ockam][main-ockam-crate-link] library.
//!
//! The main [Ockam][main-ockam-crate-link] crate re-exports types defined in
//! this crate.
//!
//! ## Crate Features
//!
//! The `ockam_core` crate has a Cargo feature named `"std"` that is enabled by
//! default. In order to use this crate in a `no_std` context this feature can
//! be disabled as follows
//!
//! ```toml
//! [dependencies]
//! ockam_core = { version = "<current version>" , default-features = false }
//! ```
//!
//! Please note that Cargo features are unioned across the entire dependency
//! graph of a project. If any other crate you depend on has not opted out of
//! `ockam_core` default features, Cargo will build `ockam_core` with the std
//! feature enabled whether or not your direct dependency on `ockam_core`
//! has `default-features = false`.
//!
#![deny(unsafe_code)]
#![warn(
missing_docs,
trivial_casts,
trivial_numeric_casts,
unused_import_braces,
unused_qualifications
)]
#![cfg_attr(not(feature = "std"), no_std)]
#[cfg(all(not(feature = "std"), not(feature = "alloc")))]
compile_error!(r#"The "no_std" feature currently requires the "alloc" feature"#);
#[cfg(feature = "std")]
extern crate core;
#[cfg(feature = "alloc")]
#[macro_use]
extern crate alloc;
// Allow use of logging macros directly.
#[macro_use]
extern crate tracing;
pub use async_trait::async_trait;
/// Mark an Ockam Worker implementation.
#[doc(inline)]
pub use async_trait::async_trait as worker;
/// Mark an Ockam Processor implementation.
#[doc(inline)]
pub use async_trait::async_trait as processor;
extern crate ockam_macros;
pub use ockam_macros::{AsyncTryClone, Message};
extern crate futures_util;
/// Access control
pub mod access_control;
pub mod api;
pub mod compat;
/// Debugger
pub mod debugger;
pub mod flow_control;
/// Encoding
pub mod hex_encoding;
/// Environmental variables
#[cfg(feature = "std")]
pub mod env;
pub mod bare;
mod cbor;
mod error;
mod message;
mod processor;
mod routing;
mod uint;
mod worker;
pub use access_control::*;
pub use cbor::*;
pub use error::*;
pub use message::*;
pub use processor::*;
pub use routing::*;
pub use uint::*;
pub use worker::*;
#[cfg(all(not(feature = "std"), feature = "alloc"))]
#[doc(hidden)]
pub use compat::println;
#[cfg(feature = "std")]
#[doc(hidden)]
pub use std::println;
use crate::compat::boxed::Box;
/// Clone trait for async structs.
#[async_trait]
pub trait AsyncTryClone: Sized {
/// Try cloning a object and return an `Err` in case of failure.
async fn async_try_clone(&self) -> Result<Self>;
}
#[async_trait]
impl<D> AsyncTryClone for D
where
D: Clone + Sync,
{
async fn async_try_clone(&self) -> Result<Self> {
Ok(self.clone())
}
}
/// Produces Ok(false) to avoid an ambiguous reading from using the unadorned value in auth code.
#[inline]
pub fn deny() -> Result<bool> {
Ok(false)
}
/// Produces Ok(true) to avoid an ambiguous reading from using the unadorned value in auth code.
#[inline]
pub fn allow() -> Result<bool> {
Ok(true)
}