Skip to main content

Browser

Struct Browser 

Source
pub struct Browser { /* private fields */ }
Expand description

A browser instance = 1 chrome.exe process + CDP connection.

Implementations§

Source§

impl Browser

Source

pub async fn new() -> Result<Browser>

Create a headless browser with default config.

Source

pub fn builder() -> BrowserBuilder

Create a builder for fine-grained control.

Examples found in repository?
examples/input_test.rs (line 20)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== Input Simulation Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22    let page = browser.navigate("https://www.google.com").await
23        .expect("navigate failed");
24
25    println!("[1] Human idle (2s)...");
26    page.human_idle(2000).await.expect("idle failed");
27
28    println!("[2] Scroll...");
29    page.scroll(300).await.expect("scroll failed");
30
31    println!("[3] Click...");
32    page.click(600.0, 300.0).await.expect("click failed");
33
34    println!("[4] Type...");
35    page.type_text("hello").await.expect("type failed");
36
37    println!("[5] Shutting down...");
38    browser.shutdown().await.expect("shutdown failed");
39
40    println!("\n=== PASSED ===");
41}
More examples
Hide additional examples
examples/capture_test.rs (line 9)
8async fn main() {
9    let browser = Browser::builder()
10        .headful()
11        .random()
12        .build().await
13        .expect("failed to create browser");
14
15    let page = browser.navigate("https://www.youtube.com").await
16        .expect("navigate failed");
17
18    // Wait for page to fully load
19    tokio::time::sleep(std::time::Duration::from_secs(3)).await;
20
21    // 1. Capture full MHTML (HTML + JS + CSS + images)
22    println!("[1] Capturing MHTML...");
23    let mhtml = page.capture_mhtml().await.expect("mhtml failed");
24    std::fs::write("youtube.mhtml", &mhtml).expect("write failed");
25    println!("    Saved youtube.mhtml ({} bytes)", mhtml.len());
26
27    // 2. Capture HTML via DOM (scripts intact, no escaping issues)
28    println!("[2] Capturing HTML via DOM...");
29    let html = page.capture_html().await.expect("html failed");
30    std::fs::write("youtube.html", &html).expect("write failed");
31    println!("    Saved youtube.html ({} bytes)", html.len());
32
33    // Verify scripts are intact
34    let script_count = html.matches("<script").count();
35    println!("    <script> tags found: {}", script_count);
36
37    browser.shutdown().await.expect("shutdown failed");
38    println!("\nDone. Open youtube.mhtml in Chrome to verify.");
39}
examples/rotate_test.rs (line 14)
8async fn main() {
9    println!("=== Profile Rotation Test (async) ===\n");
10
11    for i in 0..3 {
12        println!("--- Browser {} (random profile) ---", i + 1);
13
14        let browser = Browser::builder().headful().random().build().await
15            .expect("failed to create browser");
16
17        let page = browser.navigate("about:blank").await.expect("navigate failed");
18
19        let cores = page.js("navigator.hardwareConcurrency.toString()").await.unwrap_or_default();
20        let screen = page.js("screen.width+'x'+screen.height").await.unwrap_or_default();
21        let tz = page.js("Intl.DateTimeFormat().resolvedOptions().timeZone").await.unwrap_or_default();
22        let langs = page.js("JSON.stringify(navigator.languages)").await.unwrap_or_default();
23        let gl = page.js(
24            "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"
25        ).await.unwrap_or_default();
26
27        println!("  Cores: {}  Screen: {}", cores, screen);
28        println!("  GPU: {}", gl);
29        println!("  TZ: {}  Langs: {}", tz, langs);
30
31        browser.shutdown().await.expect("shutdown failed");
32        println!();
33    }
34
35    println!("=== DONE ===");
36}
examples/smoke_test.rs (line 45)
30async fn main() {
31    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
32        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
33            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
34            let cfg = dir.join("test_profile.json");
35            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
36        }
37        "out/Default/test_profile.json".to_string()
38    });
39
40    println!("=== clawser-browser smoke test (async) ===\n");
41
42    // HEADLESS
43    println!("[1] Creating HEADLESS browser...");
44    let start = Instant::now();
45    let browser = Browser::builder().headless().config(&config).build().await
46        .expect("Failed to create headless browser");
47    println!("    OK in {:?}", start.elapsed());
48
49    let page = browser.navigate("about:blank").await.expect("navigate failed");
50    let result = page.js("1 + 1").await.expect("js failed");
51    assert!(result.contains("2"));
52    test_antidetect(&page, "HEADLESS").await;
53    browser.shutdown().await.expect("shutdown failed");
54
55    // HEADFUL
56    println!("\n[2] Creating HEADFUL browser...");
57    let start = Instant::now();
58    let browser = Browser::builder().headful().config(&config).build().await
59        .expect("Failed to create headful browser");
60    println!("    OK in {:?}", start.elapsed());
61
62    let page = browser.navigate("about:blank").await.expect("navigate failed");
63    test_antidetect(&page, "HEADFUL").await;
64    browser.shutdown().await.expect("shutdown failed");
65
66    println!("\n=== ALL TESTS PASSED ===");
67}
examples/youtube_test.rs (line 20)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== YouTube Headful Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22
23    let page = browser.navigate("https://www.youtube.com").await
24        .expect("failed to navigate");
25
26    // Simulate human behavior
27    page.human_idle(1500).await.expect("idle failed");
28    page.scroll(200).await.expect("scroll failed");
29
30    println!("Title: {}", page.js("document.title").await.unwrap_or_default());
31    println!("URL: {}", page.js("window.location.href").await.unwrap_or_default());
32
33    let checks: &[(&str, &str)] = &[
34        ("UA", "navigator.userAgent"),
35        ("Cores", "navigator.hardwareConcurrency.toString()"),
36        ("Memory", "(navigator.deviceMemory||'?').toString()"),
37        ("webdriver", "navigator.webdriver.toString()"),
38        ("Screen", "screen.width+'x'+screen.height"),
39        ("Timezone", "Intl.DateTimeFormat().resolvedOptions().timeZone"),
40        ("GPU", "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"),
41    ];
42    for (name, code) in checks {
43        println!("{}: {}", name, page.js(code).await.unwrap_or_default());
44    }
45
46    browser.shutdown().await.expect("shutdown failed");
47    println!("\nDone.");
48}
Source

pub async fn navigate(&self, url: &str) -> Result<Page<'_>>

Navigate the current page to a URL.

Examples found in repository?
examples/input_test.rs (line 22)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== Input Simulation Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22    let page = browser.navigate("https://www.google.com").await
23        .expect("navigate failed");
24
25    println!("[1] Human idle (2s)...");
26    page.human_idle(2000).await.expect("idle failed");
27
28    println!("[2] Scroll...");
29    page.scroll(300).await.expect("scroll failed");
30
31    println!("[3] Click...");
32    page.click(600.0, 300.0).await.expect("click failed");
33
34    println!("[4] Type...");
35    page.type_text("hello").await.expect("type failed");
36
37    println!("[5] Shutting down...");
38    browser.shutdown().await.expect("shutdown failed");
39
40    println!("\n=== PASSED ===");
41}
More examples
Hide additional examples
examples/capture_test.rs (line 15)
8async fn main() {
9    let browser = Browser::builder()
10        .headful()
11        .random()
12        .build().await
13        .expect("failed to create browser");
14
15    let page = browser.navigate("https://www.youtube.com").await
16        .expect("navigate failed");
17
18    // Wait for page to fully load
19    tokio::time::sleep(std::time::Duration::from_secs(3)).await;
20
21    // 1. Capture full MHTML (HTML + JS + CSS + images)
22    println!("[1] Capturing MHTML...");
23    let mhtml = page.capture_mhtml().await.expect("mhtml failed");
24    std::fs::write("youtube.mhtml", &mhtml).expect("write failed");
25    println!("    Saved youtube.mhtml ({} bytes)", mhtml.len());
26
27    // 2. Capture HTML via DOM (scripts intact, no escaping issues)
28    println!("[2] Capturing HTML via DOM...");
29    let html = page.capture_html().await.expect("html failed");
30    std::fs::write("youtube.html", &html).expect("write failed");
31    println!("    Saved youtube.html ({} bytes)", html.len());
32
33    // Verify scripts are intact
34    let script_count = html.matches("<script").count();
35    println!("    <script> tags found: {}", script_count);
36
37    browser.shutdown().await.expect("shutdown failed");
38    println!("\nDone. Open youtube.mhtml in Chrome to verify.");
39}
examples/rotate_test.rs (line 17)
8async fn main() {
9    println!("=== Profile Rotation Test (async) ===\n");
10
11    for i in 0..3 {
12        println!("--- Browser {} (random profile) ---", i + 1);
13
14        let browser = Browser::builder().headful().random().build().await
15            .expect("failed to create browser");
16
17        let page = browser.navigate("about:blank").await.expect("navigate failed");
18
19        let cores = page.js("navigator.hardwareConcurrency.toString()").await.unwrap_or_default();
20        let screen = page.js("screen.width+'x'+screen.height").await.unwrap_or_default();
21        let tz = page.js("Intl.DateTimeFormat().resolvedOptions().timeZone").await.unwrap_or_default();
22        let langs = page.js("JSON.stringify(navigator.languages)").await.unwrap_or_default();
23        let gl = page.js(
24            "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"
25        ).await.unwrap_or_default();
26
27        println!("  Cores: {}  Screen: {}", cores, screen);
28        println!("  GPU: {}", gl);
29        println!("  TZ: {}  Langs: {}", tz, langs);
30
31        browser.shutdown().await.expect("shutdown failed");
32        println!();
33    }
34
35    println!("=== DONE ===");
36}
examples/smoke_test.rs (line 49)
30async fn main() {
31    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
32        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
33            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
34            let cfg = dir.join("test_profile.json");
35            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
36        }
37        "out/Default/test_profile.json".to_string()
38    });
39
40    println!("=== clawser-browser smoke test (async) ===\n");
41
42    // HEADLESS
43    println!("[1] Creating HEADLESS browser...");
44    let start = Instant::now();
45    let browser = Browser::builder().headless().config(&config).build().await
46        .expect("Failed to create headless browser");
47    println!("    OK in {:?}", start.elapsed());
48
49    let page = browser.navigate("about:blank").await.expect("navigate failed");
50    let result = page.js("1 + 1").await.expect("js failed");
51    assert!(result.contains("2"));
52    test_antidetect(&page, "HEADLESS").await;
53    browser.shutdown().await.expect("shutdown failed");
54
55    // HEADFUL
56    println!("\n[2] Creating HEADFUL browser...");
57    let start = Instant::now();
58    let browser = Browser::builder().headful().config(&config).build().await
59        .expect("Failed to create headful browser");
60    println!("    OK in {:?}", start.elapsed());
61
62    let page = browser.navigate("about:blank").await.expect("navigate failed");
63    test_antidetect(&page, "HEADFUL").await;
64    browser.shutdown().await.expect("shutdown failed");
65
66    println!("\n=== ALL TESTS PASSED ===");
67}
examples/youtube_test.rs (line 23)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== YouTube Headful Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22
23    let page = browser.navigate("https://www.youtube.com").await
24        .expect("failed to navigate");
25
26    // Simulate human behavior
27    page.human_idle(1500).await.expect("idle failed");
28    page.scroll(200).await.expect("scroll failed");
29
30    println!("Title: {}", page.js("document.title").await.unwrap_or_default());
31    println!("URL: {}", page.js("window.location.href").await.unwrap_or_default());
32
33    let checks: &[(&str, &str)] = &[
34        ("UA", "navigator.userAgent"),
35        ("Cores", "navigator.hardwareConcurrency.toString()"),
36        ("Memory", "(navigator.deviceMemory||'?').toString()"),
37        ("webdriver", "navigator.webdriver.toString()"),
38        ("Screen", "screen.width+'x'+screen.height"),
39        ("Timezone", "Intl.DateTimeFormat().resolvedOptions().timeZone"),
40        ("GPU", "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"),
41    ];
42    for (name, code) in checks {
43        println!("{}: {}", name, page.js(code).await.unwrap_or_default());
44    }
45
46    browser.shutdown().await.expect("shutdown failed");
47    println!("\nDone.");
48}
Source

pub async fn cookies(&self, url: &str) -> Result<Vec<Cookie>>

Get cookies for a URL (or all if empty).

Source

pub async fn screenshot(&self) -> Result<Vec<u8>>

Take a screenshot (PNG bytes).

Source

pub async fn shutdown(self) -> Result<()>

Shut down the browser process cleanly.

Examples found in repository?
examples/input_test.rs (line 38)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== Input Simulation Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22    let page = browser.navigate("https://www.google.com").await
23        .expect("navigate failed");
24
25    println!("[1] Human idle (2s)...");
26    page.human_idle(2000).await.expect("idle failed");
27
28    println!("[2] Scroll...");
29    page.scroll(300).await.expect("scroll failed");
30
31    println!("[3] Click...");
32    page.click(600.0, 300.0).await.expect("click failed");
33
34    println!("[4] Type...");
35    page.type_text("hello").await.expect("type failed");
36
37    println!("[5] Shutting down...");
38    browser.shutdown().await.expect("shutdown failed");
39
40    println!("\n=== PASSED ===");
41}
More examples
Hide additional examples
examples/capture_test.rs (line 37)
8async fn main() {
9    let browser = Browser::builder()
10        .headful()
11        .random()
12        .build().await
13        .expect("failed to create browser");
14
15    let page = browser.navigate("https://www.youtube.com").await
16        .expect("navigate failed");
17
18    // Wait for page to fully load
19    tokio::time::sleep(std::time::Duration::from_secs(3)).await;
20
21    // 1. Capture full MHTML (HTML + JS + CSS + images)
22    println!("[1] Capturing MHTML...");
23    let mhtml = page.capture_mhtml().await.expect("mhtml failed");
24    std::fs::write("youtube.mhtml", &mhtml).expect("write failed");
25    println!("    Saved youtube.mhtml ({} bytes)", mhtml.len());
26
27    // 2. Capture HTML via DOM (scripts intact, no escaping issues)
28    println!("[2] Capturing HTML via DOM...");
29    let html = page.capture_html().await.expect("html failed");
30    std::fs::write("youtube.html", &html).expect("write failed");
31    println!("    Saved youtube.html ({} bytes)", html.len());
32
33    // Verify scripts are intact
34    let script_count = html.matches("<script").count();
35    println!("    <script> tags found: {}", script_count);
36
37    browser.shutdown().await.expect("shutdown failed");
38    println!("\nDone. Open youtube.mhtml in Chrome to verify.");
39}
examples/rotate_test.rs (line 31)
8async fn main() {
9    println!("=== Profile Rotation Test (async) ===\n");
10
11    for i in 0..3 {
12        println!("--- Browser {} (random profile) ---", i + 1);
13
14        let browser = Browser::builder().headful().random().build().await
15            .expect("failed to create browser");
16
17        let page = browser.navigate("about:blank").await.expect("navigate failed");
18
19        let cores = page.js("navigator.hardwareConcurrency.toString()").await.unwrap_or_default();
20        let screen = page.js("screen.width+'x'+screen.height").await.unwrap_or_default();
21        let tz = page.js("Intl.DateTimeFormat().resolvedOptions().timeZone").await.unwrap_or_default();
22        let langs = page.js("JSON.stringify(navigator.languages)").await.unwrap_or_default();
23        let gl = page.js(
24            "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"
25        ).await.unwrap_or_default();
26
27        println!("  Cores: {}  Screen: {}", cores, screen);
28        println!("  GPU: {}", gl);
29        println!("  TZ: {}  Langs: {}", tz, langs);
30
31        browser.shutdown().await.expect("shutdown failed");
32        println!();
33    }
34
35    println!("=== DONE ===");
36}
examples/smoke_test.rs (line 53)
30async fn main() {
31    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
32        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
33            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
34            let cfg = dir.join("test_profile.json");
35            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
36        }
37        "out/Default/test_profile.json".to_string()
38    });
39
40    println!("=== clawser-browser smoke test (async) ===\n");
41
42    // HEADLESS
43    println!("[1] Creating HEADLESS browser...");
44    let start = Instant::now();
45    let browser = Browser::builder().headless().config(&config).build().await
46        .expect("Failed to create headless browser");
47    println!("    OK in {:?}", start.elapsed());
48
49    let page = browser.navigate("about:blank").await.expect("navigate failed");
50    let result = page.js("1 + 1").await.expect("js failed");
51    assert!(result.contains("2"));
52    test_antidetect(&page, "HEADLESS").await;
53    browser.shutdown().await.expect("shutdown failed");
54
55    // HEADFUL
56    println!("\n[2] Creating HEADFUL browser...");
57    let start = Instant::now();
58    let browser = Browser::builder().headful().config(&config).build().await
59        .expect("Failed to create headful browser");
60    println!("    OK in {:?}", start.elapsed());
61
62    let page = browser.navigate("about:blank").await.expect("navigate failed");
63    test_antidetect(&page, "HEADFUL").await;
64    browser.shutdown().await.expect("shutdown failed");
65
66    println!("\n=== ALL TESTS PASSED ===");
67}
examples/youtube_test.rs (line 46)
8async fn main() {
9    let config = std::env::var("CLAWSER_CONFIG").unwrap_or_else(|_| {
10        if let Ok(chrome) = std::env::var("CLAWSER_CHROME_PATH") {
11            let dir = std::path::Path::new(&chrome).parent().unwrap_or(std::path::Path::new("."));
12            let cfg = dir.join("test_profile.json");
13            if cfg.exists() { return cfg.to_string_lossy().to_string(); }
14        }
15        "out/Default/test_profile.json".to_string()
16    });
17
18    println!("=== YouTube Headful Test (async) ===\n");
19
20    let browser = Browser::builder().headful().config(&config).build().await
21        .expect("failed to create browser");
22
23    let page = browser.navigate("https://www.youtube.com").await
24        .expect("failed to navigate");
25
26    // Simulate human behavior
27    page.human_idle(1500).await.expect("idle failed");
28    page.scroll(200).await.expect("scroll failed");
29
30    println!("Title: {}", page.js("document.title").await.unwrap_or_default());
31    println!("URL: {}", page.js("window.location.href").await.unwrap_or_default());
32
33    let checks: &[(&str, &str)] = &[
34        ("UA", "navigator.userAgent"),
35        ("Cores", "navigator.hardwareConcurrency.toString()"),
36        ("Memory", "(navigator.deviceMemory||'?').toString()"),
37        ("webdriver", "navigator.webdriver.toString()"),
38        ("Screen", "screen.width+'x'+screen.height"),
39        ("Timezone", "Intl.DateTimeFormat().resolvedOptions().timeZone"),
40        ("GPU", "(function(){var c=document.createElement('canvas');var g=c.getContext('webgl');if(!g)return'no';var d=g.getExtension('WEBGL_debug_renderer_info');return d?g.getParameter(d.UNMASKED_RENDERER_WEBGL):'no'})()"),
41    ];
42    for (name, code) in checks {
43        println!("{}: {}", name, page.js(code).await.unwrap_or_default());
44    }
45
46    browser.shutdown().await.expect("shutdown failed");
47    println!("\nDone.");
48}

Trait Implementations§

Source§

impl Drop for Browser

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more