WebClient

Struct WebClient 

Source
pub struct WebClient {
    pub config: Config,
    pub puzzle_cache: Box<dyn PuzzleCache>,
    pub session_cache: Box<dyn SessionCache>,
    /* private fields */
}
Expand description

HTTP-based implementation of the Client trait that talks with the Advent of Code website.

§Initialization Patterns

  1. new() - Creates a client with default configuration. Requires a valid user config, a config in the local directory, or the AOC_SESSION_ID and AOC_PASSPHRASE environment variables to be set.

  2. with_options(ClientOptions) - Creates a client with custom configuration options (directories, passphrase, etc.). This is the standard path for most use cases.

  3. with_custom_impl(ClientConfig, Box<dyn AdventOfCodeProtocol>) - For testing usage. Allows callers to inject a mock HTTP implementation. Caches are still created automatically from the config.

§Dependencies

  • Session ID: Required for authentication. Must be a valid Advent of Code session cookie.
  • Network Access: Required for fetching new puzzles and submitting answers.
  • Passphrase: Used to encrypt cached puzzle inputs on disk (as requested by AoC maintainer).
  • Cache Directories: Created automatically if missing.

Fields§

§config: Config

The client configuration (session ID, cache directories, passphrase, etc)

§puzzle_cache: Box<dyn PuzzleCache>

Stores encrypted puzzle inputs and answer data.

§session_cache: Box<dyn SessionCache>

Stores submission timeout state.

Implementations§

Source§

impl WebClient

Source

pub fn new() -> Result<Self, ClientError>

Creates a client with default configuration from environment variables.

Source

pub fn with_config(config: Config) -> Self

Creates a client with custom configuration options.

Source

pub fn with_custom_impl( config: Config, advent_protocol: Box<dyn ServiceConnector>, ) -> Self

Creates a client with a custom HTTP protocol implementation.

Useful for testing or using an alternative HTTP backend. Caches are automatically created from the provided config.

Trait Implementations§

Source§

impl Client for WebClient

Source§

fn years(&self) -> Vec<Year>

Returns the list of available puzzle years starting at 2015. The current year is included when the current month is December.
Source§

fn days(&self, year: Year) -> Option<Vec<Day>>

Returns the list of available puzzle days for a given year. None is returned when year is the current year, and the current month is not December.
Source§

fn get_input(&self, day: Day, year: Year) -> Result<String, ClientError>

Fetches the puzzle input for a given day and year. Cached inputs are returned without fetching from the service.
Source§

fn submit_answer( &mut self, answer: Answer, part: Part, day: Day, year: Year, ) -> Result<CheckResult, ClientError>

Submits an answer for a puzzle part. Cached answers are returned immediately without submitting to the service.
Source§

fn get_puzzle(&self, day: Day, year: Year) -> Result<Puzzle, ClientError>

Fetches the complete puzzle data (input and cached answers) for a given day and year.

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where 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 T
where 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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

impl<T> ErasedDestructor for T
where T: 'static,