#![warn(missing_docs)]
#![allow(clippy::result_large_err)]
#[cfg(feature = "application")]
pub mod application;
#[cfg(feature = "application")]
pub mod client;
#[cfg(feature = "application")]
mod error;
#[cfg(feature = "application")]
pub use error::ApplicationError;
#[cfg(feature = "application")]
pub use error::RusaintError;
#[cfg(feature = "application")]
pub use error::SsuSsoError;
#[cfg(feature = "application")]
mod session;
#[cfg(feature = "application")]
pub use session::obtain_ssu_sso_token;
#[cfg(feature = "application")]
pub use session::USaintSession;
#[cfg(feature = "application")]
pub mod model;
pub(crate) mod utils;
#[cfg(feature = "uniffi")]
uniffi::setup_scaffolding!();
#[cfg(feature = "uniffi")]
pub mod uniffi_support;
#[cfg(test)]
#[allow(missing_docs)]
pub mod global_test_utils {
use crate::{USaintSession, model::SemesterType};
use anyhow::{Error, Result};
use dotenvy::dotenv;
use lazy_static::lazy_static;
use std::{fs::File, io::BufReader, sync::Arc};
lazy_static! {
pub(crate) static ref TARGET_YEAR: u32 = {
dotenv().ok();
std::env::var("TARGET_YEAR").unwrap().parse().unwrap()
};
pub(crate) static ref TARGET_SEMESTER: SemesterType = {
dotenv().ok();
let semester = std::env::var("TARGET_SEMESTER").unwrap();
match semester.to_uppercase().as_str() {
"1" | "ONE" => SemesterType::One,
"SUMMER" => SemesterType::Summer,
"2" | "TWO" => SemesterType::Two,
"WINTER" => SemesterType::Winter,
_ => panic!("{:?}", Error::msg("Invalid semester")),
}
};
}
pub async fn get_session() -> Result<Arc<USaintSession>> {
let session_file_path =
std::env::var("SSO_SESSION_FILE").unwrap_or("session.json".to_string());
let f = File::open(&session_file_path)
.map_err(|e| Error::msg(format!("Failed to open session file: {e}")))?;
let reader = BufReader::new(f);
let session: USaintSession = USaintSession::from_json(reader)
.map_err(|e| Error::msg(format!("Failed to parse session file: {e}")))?;
let session = Arc::new(session);
Ok(session)
}
}