pub struct ClientConfig<L: LoginCredentials> {
    pub login_credentials: L,
    pub max_channels_per_connection: usize,
    pub max_waiting_messages_per_connection: usize,
    pub time_per_message: Duration,
    pub connection_rate_limiter: Arc<Semaphore>,
    pub new_connection_every: Duration,
    pub connect_timeout: Duration,
    pub metrics_config: MetricsConfig,
    pub tracing_identifier: Option<Cow<'static, str>>,
}
Expand description

Configures settings for a TwitchIRCClient.

Fields§

§login_credentials: L

Gets a set of credentials every time the client needs to log in on a new connection. See LoginCredentials for details.

§max_channels_per_connection: usize

A new connection will automatically be created if a channel is joined and all currently established connections have joined at least this many channels.

§max_waiting_messages_per_connection: usize

A new connection will automatically be created if any message is to be sent and all currently established connections have recently sent more than this many messages (time interval is defined by max_waiting_messages_duration_window)

§time_per_message: Duration

We assume messages to be “waiting” for this amount of time after sending them out, e.g. typically 100 or 150 milliseconds (purely a value that has been measured/observed, not documented or fixed in any way)

§connection_rate_limiter: Arc<Semaphore>

rate-limits the opening of new connections. By default this is constructed with 1 permit only, which means connections cannot be opened in parallel. If this is set to more than 1 permit, then that many connections can be opened in parallel.

This is designed to be wrapped in an Arc to allow it to be shared between multiple TwitchIRCClient instances.

§new_connection_every: Duration

Allow a new connection to be made after this period has elapsed. By default this is set to 2 seconds, and combined with the permits=1 of the semaphore, allows one connection to be made every 2 seconds.

More specifically, after taking the permit from the semaphore, the permit will be put back after this period has elapsed.

§connect_timeout: Duration

Imposes a general timeout for new connections. This is in place in addition to possible operating system timeouts (E.g. for new TCP connections), since additional “connect” work takes place after the TCP connection is opened, e.g. to set up TLS or perform a WebSocket handshake. Default value: 20 seconds.

§metrics_config: MetricsConfig

Disable or enable and configure the collection of metrics on this TwitchIRCClient using the prometheus crate. See more information about the possible options on the MetricsConfig enum.

This crate is currently capable of exporting the following prometheus metrics:

  • twitchirc_messages_received with label command counts all incoming messages. (Counter)

  • twitchirc_messages_sent counts messages sent out, with a command label. (Counter)

  • twitchirc_channels with type=allocated/confirmed counts how many channels you are joined to (Gauge). Allocated channels are joins that passed through the TwitchIRCClient but may be waiting e.g. for the connection to finish connecting. Once a confirmation response is received by Twitch that the channel was joined successfully, that channel is additionally confirmed.

  • twitchirc_connections counts how many connections this client has in use (Gauge). The label state=initializing/open identifies how many connections are in the process of connecting (initializing) vs how many connections are already established (open).

  • twitchirc_connections_failed counts every time a connection fails (Counter). Note however, depending on conditions e.g. how many channels were joined on that channel, there can be cases where a connection failing would not mandate the creation of a new connection (e.g. if you have parted channels on other connections, making it so all the channels the failed connection was joined to can be re-joined on those already existing connections).

  • twitchirc_connections_created on the other hand tracks how many times, since the creation of the client, a new connection has been made.

§tracing_identifier: Option<Cow<'static, str>>

Allows you to differentiate between multiple clients with the tracing crate.

This library logs a variety of trace, debug, info, warning and error messages using the tracing crate. An example log line using the default tracing_subscriber output format might look like this:

2022-02-07T10:44:23.297571Z  INFO client_loop: twitch_irc::client::event_loop: Making a new pool connection, new ID is 0

You may optionally set this configuration variable to some string, which will then modify all log messages by giving the client_loop span the name attribute:

use std::borrow::Cow;
use twitch_irc::ClientConfig;

let mut config = ClientConfig::default();
config.tracing_identifier = Some(Cow::Borrowed("bot_one"));

All log output will then look like this (note the additional {name=bot_one}:

2022-02-07T10:48:34.769272Z  INFO client_loop{name=bot_one}: twitch_irc::client::event_loop: Making a new pool connection, new ID is 0

Essentially, this library makes use of tracing Spans to differentiate between different async tasks and to also differentiate log messages coming from different connections.

Specifying this option will further allow you to differentiate between multiple clients if your application is running multiple of them. It will add the name=your_value attribute to the client_loop span, which is root for all further deeper spans in the client. This means that all log output from a single client will all be under that span, with that name.

Implementations§

source§

impl<L: LoginCredentials> ClientConfig<L>

source

pub fn new_simple(login_credentials: L) -> ClientConfig<L>

Create a new configuration from the given login credentials, with all other configuration options being default.

Trait Implementations§

source§

impl<L: Debug + LoginCredentials> Debug for ClientConfig<L>

source§

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

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

impl Default for ClientConfig<StaticLoginCredentials>

source§

fn default() -> ClientConfig<StaticLoginCredentials>

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

Auto Trait Implementations§

§

impl<L> !RefUnwindSafe for ClientConfig<L>

§

impl<L> Send for ClientConfig<L>

§

impl<L> Sync for ClientConfig<L>

§

impl<L> Unpin for ClientConfig<L>where L: Unpin,

§

impl<L> !UnwindSafe for ClientConfig<L>

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

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

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

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>,

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.

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.
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.
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

source§

impl<T> WithSubscriber for T

source§

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
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

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