shindan_maker/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
/*!
[![GitHub]](https://github.com/araea/shindan-maker) [![crates-io]](https://crates.io/crates/shindan-maker) [![docs-rs]](crate)
[GitHub]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=555555&logo=github
[crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColor=555555&logo=rust
[docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs
<br>
A Rust library for interacting with [ShindanMaker].
This library provides functionality to interact with various ShindanMaker domains, submit shindans, and parse results.
- Asynchronous API (Tokio)
- Multi-domain support (JP, EN, CN, KR, TH)
- Easy shindan submission and result parsing
[ShindanMaker]: https://en.shindanmaker.com/
## Example
### Get title
```rust
use shindan_maker::{ShindanClient, ShindanDomain};
#[tokio::main]
async fn main() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let title = client
.get_title("1222992")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
}
```
### Get segments (need "segments" feature)
```rust
use shindan_maker::{ShindanClient, ShindanDomain};
#[tokio::main]
async fn main() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let (segments, title) = client
.get_segments_with_title("1222992", "test_user")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
println!("Result title: {}", title);
println!("Result text: {}", segments);
println!("Result segments: {:#?}", segments);
}
```
### Get HTML string (need "html" feature)
- HTML string to image: [cdp-html-shot](https://crates.io/crates/cdp-html-shot).
```rust
use shindan_maker::{ShindanClient, ShindanDomain};
#[tokio::main]
async fn main() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let (_html_str, title) = client
.get_html_str_with_title("1222992", "test_user")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
}
```
*/
mod client;
mod selectors;
mod html_utils;
mod http_utils;
#[cfg(feature = "segments")]
mod segment;
#[cfg(feature = "html")]
mod html_template;
pub use client::{ShindanClient, ShindanDomain};
#[cfg(feature = "segments")]
pub use segment::Segment;
#[cfg(test)]
mod tests {
use super::client::{ShindanClient, ShindanDomain};
use tokio;
#[tokio::test]
async fn test_get_title() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let title = client.
get_title("1222992")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
}
#[cfg(feature = "segments")]
#[tokio::test]
async fn test_get_segments() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let (_segments, title) = client
.get_segments_with_title("1222992", "test_user")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
}
#[cfg(feature = "html")]
#[tokio::test]
async fn test_get_html_str() {
let client = ShindanClient::new(ShindanDomain::En).unwrap();
let (_html_str, title) = client
.get_html_str_with_title("1222992", "test_user")
.await
.unwrap();
assert_eq!("Fantasy Stats", title);
}
}