canvas_lms_api/lib.rs
1//! # canvas-lms-api
2//!
3//! An async Rust client for the [Instructure Canvas LMS REST API](https://canvas.instructure.com/doc/api/).
4//!
5//! Licensed under the [MIT License](https://github.com/RobertConde/canvas-lms-api/blob/main/LICENSE).
6//!
7//! ## Quickstart
8//!
9//! ```no_run
10//! # #[tokio::main] async fn main() -> canvas_lms_api::Result<()> {
11//! use canvas_lms_api::Canvas;
12//!
13//! let canvas = Canvas::new("https://canvas.example.edu", "your-access-token")?;
14//!
15//! // Fetch a course
16//! let course = canvas.get_course(1).await?;
17//! println!("{}", course.name.as_deref().unwrap_or_default());
18//!
19//! // Stream all assignments lazily
20//! let assignments = course.get_assignments().collect_all().await?;
21//! println!("{} assignments", assignments.len());
22//! # Ok(()) }
23//! ```
24//!
25//! ## Features
26//!
27//! | Feature | Default | Description |
28//! |---------|---------|-------------|
29//! | `async` | yes | Async API via `tokio` + `reqwest` |
30//! | `blocking` | no | `CanvasBlocking` — sync wrapper, no `async`/`.await` needed |
31//! | `new-quizzes` | no | New Quizzes endpoint (`/api/quiz/v1/`) |
32//! | `graphql` | no | GraphQL endpoint support |
33//! | `full` | no | All optional features |
34//!
35//! ## Pagination
36//!
37//! Methods returning multiple resources return a [`PageStream<T>`], which fetches pages
38//! lazily from Canvas's paginated API. Call [`.collect_all()`][PageStream::collect_all]
39//! to gather everything into a `Vec`, or iterate page-by-page as needed.
40
41pub mod client;
42pub mod error;
43pub mod pagination;
44pub mod resources;
45
46mod http;
47pub(crate) mod params;
48pub mod upload;
49
50#[cfg(feature = "graphql")]
51pub mod graphql;
52
53#[cfg(feature = "blocking")]
54pub mod client_blocking;
55
56pub use canvas_lms_api_derive::CanvasResource;
57pub use client::Canvas;
58pub use error::{CanvasError, Result};
59pub use pagination::PageStream;
60pub use upload::UploadRequest;
61
62#[cfg(feature = "blocking")]
63pub use client_blocking::CanvasBlocking;