Skip to main content

SiConfig

Struct SiConfig 

Source
pub struct SiConfig {
    pub login: String,
    pub auth_url: String,
    pub api_url: String,
}
Expand description

Configuration for SiServer API integration.

This structure holds the necessary information for connecting to internal SiServer systems. Unlike other API integrations, SiServer requires separate authentication and API endpoints due to its sophisticated security architecture.

§Multi-Endpoint Architecture

SiServer uses different endpoints for different purposes:

  • Authentication URL: LDAP authentication endpoint
  • API URL: Main API endpoint for reports and data
  • Separation Benefits: Enhanced security, load distribution, service isolation

§Security Considerations

  • Passwords are never stored in configuration files
  • Only username and endpoints are persisted
  • Session tokens are cached separately with encryption
  • Double base64 password encoding for transmission security

Fields§

§login: String

Username for SiServer authentication.

This should be the corporate username used for LDAP authentication. Typically matches the username used for other company systems.

§auth_url: String

URL for the SiServer authentication endpoint.

This endpoint handles LDAP authentication and token generation. Example: https://auth.company.com

This is separate from the main API URL due to SiServer’s security architecture.

§api_url: String

Base URL for the main SiServer API endpoints.

This endpoint handles report submission and data retrieval operations. Example: https://api.company.com

All API operations (reports, calendar) use this base URL.

Implementations§

Source§

impl SiConfig

Source

pub fn module() -> ConfigModule

Returns the configuration module metadata for SiServer.

Used by the configuration system to identify and manage SiServer-specific settings during interactive setup.

§Returns

A ConfigModule with SiServer identification information.

Source

pub fn init(config: &Option<SiConfig>) -> Result<Self>

Runs an interactive configuration setup for SiServer integration.

Prompts the user for SiServer connection details including username and both authentication and API endpoints. Uses existing configuration values as defaults if available.

§Interactive Prompts
  1. Username: Corporate username for LDAP authentication
  2. Authentication URL: LDAP endpoint for token generation
  3. API URL: Main API endpoint for reports and data operations

All prompts show existing values as defaults if configuration already exists, making it easy to update specific values without re-entering everything.

§Configuration Validation

While this method doesn’t validate actual connectivity, it provides helpful prompts to guide users toward correct configuration values for their corporate SiServer deployment.

§Arguments
  • config - Existing SiServer configuration to use as defaults (if any)
§Returns
  • Result<Self> - New SiServer configuration with user input
§Errors

Returns an error if:

  • Terminal input/output fails
  • User cancels the configuration process
  • Input validation fails
§Example
let existing_config = Some(SiConfig {
    login: "olduser".to_string(),
    auth_url: "https://old-auth.com".to_string(),
    api_url: "https://old-api.com".to_string(),
});

let new_config = SiConfig::init(&existing_config)?;

Trait Implementations§

Source§

impl Clone for SiConfig

Source§

fn clone(&self) -> SiConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SiConfig

Source§

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

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

impl<'de> Deserialize<'de> for SiConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for SiConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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: Sized + 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: Sized + 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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

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