Struct kvarn::RunConfig

source ·
pub struct RunConfig { /* private fields */ }
Expand description

Configuration for Self::execute. This mainly consists of an array of PortDescriptors.

It also allows control of handover.

Will bind a TcpListener on every port added using Self::bind

This ↑ will change when HTTP/3 support arrives, then Udp will also be used.

Examples

See Self::execute as it uses this, created by a macro invocation.

let host = Host::unsecure("localhost", "web", Extensions::default(), host::Options::default());
let data = HostCollection::builder().insert(host).build();
let port_descriptor = PortDescriptor::new(8080, data);

let config = RunConfig::new()
    .bind(port_descriptor)
    .set_ctl_path("/run/kvarn-instance-1.sock");
config.execute().await.shutdown();

Implementations§

source§

impl RunConfig

source

pub fn new() -> Self

Creates an empty RunConfig.

source

pub fn bind(self, port: PortDescriptor) -> Self

Adds a PortDescriptor to the Kvarn server.

source

pub fn disable_ctl(self) -> Self

Available on crate feature handover only.

Disables handover and ctl for the instance of Kvarn.

This can enable multiple Kvarn servers to run on the same machine.

source

pub fn set_ctl_path(self, path: impl AsRef<Path>) -> Self

Available on crate feature handover only.

Sets the path of the socket where the handover and ctl is managed.

By default, this is /run/user/<uid>/kvarn.sock for users and /run/kvarn.sock for root users.

This can enable multiple Kvarn servers to run on the same machine. If each application (as in an use for Kvarn) has it’s own path, multiple can coexist.

source

pub fn add_plugin(self, name: impl AsRef<str>, plugin: Plugin) -> Self

Available on crate feature handover only.

Add plugin to be executed when a command with name is received from kvarnctl.

Adding multiple with the same name overrides the old one.

See ctl::Plugins for the default ctl::Plugins that are added.

source

pub async fn execute(self) -> Arc<Manager>

Run the Kvarn web server on ports.

This is the last step in getting Kvarn spinning. You can interact with the caches through the Host and HostCollection you created, and the returned shutdown::Manager, if you have the graceful-shutdown feature enabled.

Examples

Will start a bare-bones web server on port 8080, using the dir web to serve files.

Note: it uses web to serve files only if the feature fs is enabled. Place them in web/public to access them in your user-agent. It’s done this way to enable you to have domain-specific files not being public to the web, and for a place to store other important files. Kvarn extensions’ template system will in this case read template files from web/templates.

use kvarn::prelude::*;

// Create a host with hostname "localhost", serving files from directory "./web/public/", with the default extensions and the default options.
let host = Host::unsecure("localhost", "web", Extensions::default(), host::Options::default());
// Create a set of virtual hosts (`HostCollection`) with `host` as the default.
let data = HostCollection::builder().insert(host).build();
// Bind port 8080 with `data`.
let port_descriptor = PortDescriptor::new(8080, data);

// Run with the configured ports.
let shutdown_manager = run_config![port_descriptor].execute().await;
// Waits for shutdown.
shutdown_manager.wait().await;

Trait Implementations§

source§

impl Debug for RunConfig

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for RunConfig

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32 ) -> TaggedParser<'a, Implicit, Self, E>

source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more