wasm_cookies/
lib.rs

1pub mod cookies;
2pub use cookies::{AllDecodeError, CookieOptions, SameSite};
3pub use urlencoding::FromUrlEncodingError;
4
5#[cfg(target_arch = "wasm32")]
6use std::collections::HashMap;
7#[cfg(target_arch = "wasm32")]
8use web_sys::HtmlDocument;
9
10#[cfg(target_arch = "wasm32")]
11fn document() -> HtmlDocument {
12    use wasm_bindgen::JsCast;
13
14    web_sys::window()
15        .unwrap()
16        .document()
17        .unwrap()
18        .dyn_into::<HtmlDocument>()
19        .unwrap()
20}
21
22#[cfg(target_arch = "wasm32")]
23fn cookie_string() -> String {
24    document().cookie().unwrap()
25}
26
27#[cfg(target_arch = "wasm32")]
28fn set_cookie_string(value: &str) {
29    document().set_cookie(value).unwrap();
30}
31
32/// Returns all cookies, with undecoded keys and values.
33///
34/// Available only on `wasm32-unknown-unknown` target.
35#[cfg(target_arch = "wasm32")]
36pub fn all_raw() -> HashMap<String, String> {
37    cookies::all_raw(&cookie_string())
38}
39
40/// Returns all cookies, with URI decoded keys and values
41/// (with the [urlencoding crate](https://crates.io/crates/urlencoding)),
42/// or an error if URI decoding fails on a key or a value.
43///
44/// Available only on `wasm32-unknown-unknown` target.
45#[cfg(target_arch = "wasm32")]
46pub fn all() -> Result<HashMap<String, String>, AllDecodeError> {
47    cookies::all(&cookie_string())
48}
49
50/// Returns undecoded cookie if it exists.
51///
52/// Available only on `wasm32-unknown-unknown` target.
53#[cfg(target_arch = "wasm32")]
54pub fn get_raw(name: &str) -> Option<String> {
55    cookies::get_raw(&cookie_string(), name)
56}
57
58/// If it exists, returns URI decoded cookie
59/// (with the [urlencoding crate](https://crates.io/crates/urlencoding))
60/// or an error if the value's URI decoding fails.
61///
62/// Available only on `wasm32-unknown-unknown` target.
63#[cfg(target_arch = "wasm32")]
64pub fn get(name: &str) -> Option<Result<String, FromUrlEncodingError>> {
65    cookies::get(&cookie_string(), name)
66}
67
68/// Sets a cookie, with non encoded name and value.
69///
70/// Available only on `wasm32-unknown-unknown` target.
71#[cfg(target_arch = "wasm32")]
72pub fn set_raw(name: &str, value: &str, options: &CookieOptions) {
73    set_cookie_string(&cookies::set_raw(name, value, options));
74}
75
76/// Sets a cookie, with URI encoded name and value
77/// (with the [urlencoding crate](https://crates.io/crates/urlencoding)).
78///
79/// Available only on `wasm32-unknown-unknown` target.
80#[cfg(target_arch = "wasm32")]
81pub fn set(name: &str, value: &str, options: &CookieOptions) {
82    set_cookie_string(&cookies::set(name, value, options));
83}
84
85/// Deletes a cookie without encoding its name.
86///
87/// Available only on `wasm32-unknown-unknown` target.
88#[cfg(target_arch = "wasm32")]
89pub fn delete_raw(name: &str) {
90    set_cookie_string(&cookies::delete_raw(name));
91}
92
93/// Deletes a cookie, URI encoding its name.
94///
95/// Available only on `wasm32-unknown-unknown` target.
96#[cfg(target_arch = "wasm32")]
97pub fn delete(name: &str) {
98    set_cookie_string(&cookies::delete(name));
99}