📝 docs: document ptth_core

main
_ 2021-04-17 17:08:08 -05:00
parent a911e53e48
commit d457feb35f
4 changed files with 30 additions and 6 deletions

2
Cargo.lock generated
View File

@ -1443,7 +1443,7 @@ dependencies = [
[[package]] [[package]]
name = "ptth_core" name = "ptth_core"
version = "1.3.0" version = "1.4.0"
dependencies = [ dependencies = [
"base64", "base64",
"ctrlc", "ctrlc",

View File

@ -1,7 +1,7 @@
[package] [package]
name = "ptth_core" name = "ptth_core"
version = "1.3.0" version = "1.4.0"
authors = ["Trish"] authors = ["Trish"]
edition = "2018" edition = "2018"
license = "AGPL-3.0" license = "AGPL-3.0"

View File

@ -14,6 +14,8 @@ use tokio::{
use crate::prelude::*; use crate::prelude::*;
/// Initializes a graceful shutdown using the `ctrlc` crate
#[must_use] #[must_use]
pub fn init () -> oneshot::Receiver <()> { pub fn init () -> oneshot::Receiver <()> {
let (tx, rx) = oneshot::channel::<()> (); let (tx, rx) = oneshot::channel::<()> ();
@ -60,12 +62,17 @@ impl error::Error for ShutdownError {
} }
/// The type returned by `init_with_force`
pub struct ForcedShutdown { pub struct ForcedShutdown {
rx: oneshot::Receiver <()>, rx: oneshot::Receiver <()>,
tx: oneshot::Sender <()>, tx: oneshot::Sender <()>,
} }
impl ForcedShutdown { impl ForcedShutdown {
/// Wraps a future in a graceful shutdown that times out into a
/// forced shutdown.
///
/// # Errors /// # Errors
/// ///
/// `ForcedShutdown` if the graceful shutdown doesn't complete in time /// `ForcedShutdown` if the graceful shutdown doesn't complete in time
@ -97,6 +104,8 @@ impl ForcedShutdown {
} }
} }
/// Initializes a graceful shutdown that times out into a forced shutdown
#[must_use] #[must_use]
pub fn init_with_force () -> (oneshot::Receiver <()>, ForcedShutdown) { pub fn init_with_force () -> (oneshot::Receiver <()>, ForcedShutdown) {
let (tx, rx) = oneshot::channel (); let (tx, rx) = oneshot::channel ();

View File

@ -1,13 +1,24 @@
//! # PTTH Core
//!
//! Common code used by both `ptth_relay` and `ptth_server`.
#![warn (clippy::pedantic)] #![warn (clippy::pedantic)]
/// Wrapper for graceful and forced shutdowns of `ptth_relay` and `ptth_server`
pub mod graceful_shutdown; pub mod graceful_shutdown;
/// An abstraction over HTTP that is easy to (de)serialize
pub mod http_serde; pub mod http_serde;
pub mod prelude; pub mod prelude;
// It's easier if the server can stream its response body /// `ptth_server` packs its response headers into this request header
// back to the relay un-changed inside its request body ///
// So we wrap the server's actual response head /// This allows the server's response body to be wrapped verbatim
// (status code, headers, etc.) in this one header field. /// in the request body.
/// The header value is the response's status code and headers,
/// wrapped in a MessagePack structure, and encoded in base64
/// to make it ASCII.
pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4"; pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4";
@ -15,6 +26,10 @@ pub const PTTH_MAGIC_HEADER: &str = "X-PTTH-2LJYXWC4";
// e.g. prefix_match ("/prefix", "/prefix/middle/suffix") -> "/middle/suffix" // e.g. prefix_match ("/prefix", "/prefix/middle/suffix") -> "/middle/suffix"
#[must_use] #[must_use]
#[deprecated (
since = "1.4.0",
note = "Use `str::strip_prefix instead`"
)]
pub fn prefix_match <'a> (prefix: &str, hay: &'a str) -> Option <&'a str> pub fn prefix_match <'a> (prefix: &str, hay: &'a str) -> Option <&'a str>
{ {
hay.strip_prefix (prefix) hay.strip_prefix (prefix)