#![doc(test(attr(deny(warnings))))]
#![doc(test(attr(allow(dead_code))))]
#![doc(test(attr(allow(unused_variables))))]
#![deny(rustdoc::broken_intra_doc_links)]
#![deny(rustdoc::invalid_codeblock_attributes)]
use std::fmt;
pub const MAX_PENDING_REQS: u32 = 16 * 1024;
pub const INVALID_ACL_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_BODY_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_CACHE_BUSY_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_CACHE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_CACHE_REPLACE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_CONFIG_STORE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_DICTIONARY_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_KV_PENDING_DELETE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_KV_PENDING_INSERT_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_KV_PENDING_LIST_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_KV_PENDING_LOOKUP_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_KV_STORE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_PENDING_REQUEST_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_REQUEST_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_REQUEST_PROMISE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_RESPONSE_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_SECRET_HANDLE: u32 = u32::MAX - 1;
pub const INVALID_SECRET_STORE_HANDLE: u32 = u32::MAX - 1;
#[allow(non_snake_case)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u32)]
pub enum SslVersion {
TLS1 = 0,
TLS1_1 = 1,
TLS1_2 = 2,
TLS1_3 = 3,
}
impl SslVersion {
pub fn as_u32(&self) -> u32 {
*self as u32
}
}
impl TryFrom<u32> for SslVersion {
type Error = String;
fn try_from(x: u32) -> Result<Self, Self::Error> {
if x == Self::TLS1 as u32 {
Ok(Self::TLS1)
} else if x == Self::TLS1_1 as u32 {
Ok(Self::TLS1_1)
} else if x == Self::TLS1_2 as u32 {
Ok(Self::TLS1_2)
} else if x == Self::TLS1_3 as u32 {
Ok(Self::TLS1_3)
} else {
Err(format!("unknown ssl version enum value: {x}"))
}
}
}
#[derive(Clone, Copy, Eq, PartialEq)]
#[repr(transparent)]
#[must_use = "Errors should never pass silently."]
pub struct FastlyStatus {
pub code: i32,
}
impl FastlyStatus {
pub const OK: Self = Self { code: 0 };
pub const ERROR: Self = Self { code: 1 };
pub const INVAL: Self = Self { code: 2 };
pub const BADF: Self = Self { code: 3 };
pub const BUFLEN: Self = Self { code: 4 };
pub const UNSUPPORTED: Self = Self { code: 5 };
pub const BADALIGN: Self = Self { code: 6 };
pub const HTTPINVALID: Self = Self { code: 7 };
pub const HTTPUSER: Self = Self { code: 8 };
pub const HTTPINCOMPLETE: Self = Self { code: 9 };
pub const NONE: Self = Self { code: 10 };
pub const HTTPHEADTOOLARGE: Self = Self { code: 11 };
pub const HTTPINVALIDSTATUS: Self = Self { code: 12 };
pub const LIMITEXCEEDED: Self = Self { code: 13 };
pub const AGAIN: Self = Self { code: 14 };
pub fn is_ok(&self) -> bool {
self == &Self::OK
}
pub fn is_err(&self) -> bool {
!self.is_ok()
}
pub fn result(self) -> Result<(), Self> {
if let Self::OK = self {
Ok(())
} else {
Err(self)
}
}
}
impl fmt::Debug for FastlyStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "FastlyStatus::")?;
match *self {
Self::OK => write!(f, "OK"),
Self::ERROR => write!(f, "ERROR"),
Self::INVAL => write!(f, "INVAL"),
Self::BADF => write!(f, "BADF"),
Self::BUFLEN => write!(f, "BUFLEN"),
Self::UNSUPPORTED => write!(f, "UNSUPPORTED"),
Self::BADALIGN => write!(f, "BADALIGN"),
Self::HTTPINVALID => write!(f, "HTTP_INVALID_ERROR"),
Self::HTTPUSER => write!(f, "HTTP_USER_ERROR"),
Self::HTTPINCOMPLETE => write!(f, "HTTP_INCOMPLETE_MESSAGE"),
Self::NONE => write!(f, "NONE"),
Self::HTTPHEADTOOLARGE => write!(f, "HTTP_HEAD_TOO_LARGE"),
Self::HTTPINVALIDSTATUS => write!(f, "HTTP_INVALID_STATUS"),
Self::LIMITEXCEEDED => write!(f, "LIMIT_EXCEEDED"),
Self::AGAIN => write!(f, "AGAIN"),
_ => write!(f, "UNKNOWN ({})", self.code),
}
}
}
pub const FASTLY_ABI_VERSION: u64 = 1;
#[derive(Clone, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(u32)]
pub enum HttpVersion {
Http09 = 0,
Http10 = 1,
Http11 = 2,
H2 = 3,
H3 = 4,
}
impl HttpVersion {
pub fn as_u32(&self) -> u32 {
*self as u32
}
}
impl TryFrom<u32> for HttpVersion {
type Error = String;
fn try_from(x: u32) -> Result<Self, Self::Error> {
if x == Self::Http09 as u32 {
Ok(Self::Http09)
} else if x == Self::Http10 as u32 {
Ok(Self::Http10)
} else if x == Self::Http11 as u32 {
Ok(Self::Http11)
} else if x == Self::H2 as u32 {
Ok(Self::H2)
} else if x == Self::H3 as u32 {
Ok(Self::H3)
} else {
Err(format!("unknown http version enum value: {x}"))
}
}
}
impl From<http::Version> for HttpVersion {
fn from(v: http::Version) -> Self {
match v {
http::Version::HTTP_09 => Self::Http09,
http::Version::HTTP_10 => Self::Http10,
http::Version::HTTP_11 => Self::Http11,
http::Version::HTTP_2 => Self::H2,
http::Version::HTTP_3 => Self::H3,
_ => unreachable!(),
}
}
}
impl From<HttpVersion> for http::Version {
fn from(v: HttpVersion) -> Self {
match v {
HttpVersion::Http09 => Self::HTTP_09,
HttpVersion::Http10 => Self::HTTP_10,
HttpVersion::Http11 => Self::HTTP_11,
HttpVersion::H2 => Self::HTTP_2,
HttpVersion::H3 => Self::HTTP_3,
}
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(u32)]
pub enum BodyWriteEnd {
Back = 0,
Front = 1,
}
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(u32)]
pub enum FramingHeadersMode {
#[default]
Automatic = 0,
ManuallyFromHeaders = 1,
}
#[doc(hidden)]
#[derive(Clone, Copy, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[repr(u32)]
pub enum HttpKeepaliveMode {
#[default]
Automatic = 0,
NoKeepalive = 1,
}
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub enum ClientCertVerifyResult {
Ok,
BadCertificate,
CertificateRevoked,
CertificateExpired,
UnknownCa,
CertificateMissing,
CertificateUnknown,
}
impl ClientCertVerifyResult {
pub fn from_u32(value: u32) -> ClientCertVerifyResult {
match value {
0 => ClientCertVerifyResult::Ok,
1 => ClientCertVerifyResult::BadCertificate,
2 => ClientCertVerifyResult::CertificateRevoked,
3 => ClientCertVerifyResult::CertificateExpired,
4 => ClientCertVerifyResult::UnknownCa,
5 => ClientCertVerifyResult::CertificateMissing,
_ => ClientCertVerifyResult::CertificateUnknown,
}
}
}