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
140
141
142
143
144
145
146
147
/*!
[![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 anyhow::Result;
use shindan_maker::{ShindanClient, ShindanDomain};

#[tokio::main]
async fn main() -> Result<()> {
    let client = ShindanClient::new(ShindanDomain::En)?; // Enum variant
    // let client = ShindanClient::new("Jp".parse()?)?; // String slice
    // let client = ShindanClient::new("EN".parse()?)?; // Case-insensitive
    // let client = ShindanClient::new(String::from("cn").parse()?)?; // String

    let title = client
        .get_title("1222992")
        .await?;

    assert_eq!("Fantasy Stats", title);
    Ok(())
}
```

### 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
#[tokio::main]
async fn main() {
    #[cfg(feature = "html")]
    {
        use shindan_maker::{ShindanClient, ShindanDomain};
        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;
mod shindan_domain;
#[cfg(feature = "segments")]
mod segment;
#[cfg(feature = "html")]
mod html_template;

pub use client::ShindanClient;
pub use shindan_domain::ShindanDomain;
#[cfg(feature = "segments")]
pub use segment::Segment;

#[cfg(test)]
mod tests {
    use crate::{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);
    }
}