| Crates.io | rusaint |
| lib.rs | rusaint |
| version | 0.14.0 |
| created_at | 2023-10-15 01:08:47.681891+00 |
| updated_at | 2026-01-06 09:53:09.322233+00 |
| description | Easy-to-use SSU u-saint client |
| homepage | https://eatsteak.dev |
| repository | https://github.com/EATSTEAK/rusaint |
| max_upload_size | |
| id | 1003368 |
| size | 353,780 |
빠르고 간편하며 믿을 수 있는 숭실대학교 u-saint 클라이언트
rusaint(ru-saint, 루세인트)는 숭실대학교 u-saint를 정확하고 빠르게, 간편하게 파싱하고 다양한 환경에서 조작할 수 있는 Rust 기반 비공식 u-saint 클라이언트입니다.
u-saint의 기반인 SAP Web Dynpro에서 사용하는 Lightspeed 라이브러리의 최소 동작을 구현하여 안전하게 u-saint 내부 요소들을 조작하고 파싱할 수 있습니다.
cargo add rusaint
use rusaint::application::course_grades::{CourseGradesApplication, model::{CourseType}};
use rusaint::client::USaintClientBuilder;
use rusaint::USaintSession;
use rusaint::RusaintError;
use std::sync::Arc;
// 성적 정보를 출력하는 애플리케이션
#[tokio::main]
async fn main() -> Result<(), RusaintError> {
print_grades().await
/* SemesterSummary { year: 2022, semester: "2 학기", attempted_credits: 17.5, earned_credits: 17.5, pf_earned_credits: 0.5, grade_points_average: 4.5, grade_points_sum: 100.0, arithmetic_mean: 100.0, semester_rank: (1, 99), general_rank: (1, 99), academic_probation: false, consult: false, flunked: false }
* ...
*/
}
async fn print_grades() -> Result<(), RusaintError> {
// USaintSession::from_token(id: &str, token: &str) 을 이용하여 비밀번호 없이 SSO 토큰으로 로그인 할 수 있음
let session = Arc::new(USaintSession::with_password("20211561", "password").await?);
let mut app = USaintClientBuilder::new().session(session).build_into::<CourseGradesApplication>().await?;
let grades: Vec<SemesterGrade> = app.semesters(CourseType::Bachelor).await?;
for grade in grades {
println!("{:?}", grade);
}
Ok(())
}
개발 및 테스트를 위해 아래와 같은 요구사항이 필요합니다:
SSO_ID, SSO_PASSWORD 환경 변수 (숭실대학교 SSO ID/비밀번호)TARGET_YEAR, TARGET_SEMESTER 환경 변수 (학년도/학기, 예시: 2022, 1)cargo run -p rusaint-session-helper >> session.json을 실행하여 세션을 파일로 생성하여야 합니다 (사용하는 쉘에 따라 정확한 명령어는 달라질 수 있습니다).
SSO_SESSION_FILE 환경 변수에 경로를 입력하여 변경할 수 있습니다.rusaint는 빠른 테스트 실행을 위해 cargo-nextest를 사용합니다. (cargo install cargo-nextest를 통해 설치할 수 있습니다)cargo nextest run 을 실행하여 테스트를 실행합니다.자세한 정보는 아래 문서를 참고하세요.
rusaint는 uniffi를 이용한 FFI 멀티플랫폼을 지원합니다. 현재 지원하는 플랫폼은 다음과 같습니다.
repositories {
mavenCentral()
// ... any other repositories
}
dependencies {
implementation("dev.eatsteak:rusaint:0.14.0")
}
languages/kotlin 내부의 README.md 파일을 참고하세요.
SPM 레포지토리로 설치할 수 있습니다.
languages/swift 내부의 build.sh 파일을 실행하여 .xcframework 형태로 빌드할 수 있습니다.
pnpm add @rusaint/react-native # or yarn, npm
@rusaint/react-native 는 네이티브 바이너리를 사용합니다. React Native Community Autolink 및 Expo Autolink를 사용한 자동 링킹을 지원하므로 별개의 설정은 필요하지 않으나, Expo Go를 사용할 수 없음에 주의하시길 바랍니다.
# ./languages/react-native
yarn install
yarn ubrn:release-build # REQUIREMENTS: Cargo and android/ios targets for building rust binaries
yarn prepare # Run codegen
# Using pip
pip install rusaint
# Using uv
uv add rusaint
rusaint는 maturin을 사용하여 Python wheel을 빌드합니다.
# ./languages/python
# with uv
uv tool install maturin
uvx maturin build --release --out dist --find-interpreter # Creates an release wheel in ./dist directory