Skip to main content

Attachment

Struct Attachment 

Source
pub struct Attachment {
Show 13 fields pub id: u64, pub filename: String, pub ext: String, pub size: u64, pub md5: String, pub width: i32, pub height: i32, pub thumbnail_width: i32, pub thumbnail_height: i32, pub spoiler: bool, pub custom_spoiler: Option<u8>, pub deleted: bool, pub mobile_optimized: bool,
}
Expand description

File attachment metadata.

Fields§

§id: u64§filename: String

Unixtime + microtime upload identifier; this is afterall the filename on 4chan CDN.

§ext: String

Original filename the user uploaded (no extension).

§size: u64

Extension, including the leading dot (e.g. ".jpg").

§md5: String

Size in bytes.

§width: i32

24-character base64-packed MD5.

§height: i32§thumbnail_width: i32§thumbnail_height: i32§spoiler: bool§custom_spoiler: Option<u8>§deleted: bool§mobile_optimized: bool

Implementations§

Source§

impl Attachment

Source

pub fn url(&self, board: &str) -> String

Full-resolution URL on i.4cdn.org.

Examples found in repository?
examples/poll_thread.rs (line 69)
57fn print_post(board: &str, p: &Post) {
58    let who = match (&p.trip, &p.id) {
59        (Some(t), Some(id)) => format!("{} {} ({})", p.name, t, id),
60        (Some(t), None) => format!("{} {}", p.name, t),
61        (None, Some(id)) => format!("{} ({})", p.name, id),
62        (None, None) => p.name.clone(),
63    };
64    println!("--- >>{} {} [{}] ---", p.no, who, p.now);
65    if let Some(sub) = &p.sub {
66        println!("Subject: {}", sub);
67    }
68    if let Some(att) = &p.attachment {
69        println!("File: {} ({} bytes)", att.url(board), att.size);
70    }
71    if let Some(com) = &p.com {
72        println!("{}", com);
73    }
74    println!();
75}
More examples
Hide additional examples
examples/catalog_images.rs (line 16)
7async fn main() -> chan::Result<()> {
8    let board = env::args().nth(1).unwrap_or_else(|| "po".to_string());
9    let client = chan::Client::new();
10    let catalog = client.get_board_catalog(&board).await?;
11
12    let mut count = 0usize;
13    for thread in catalog.threads() {
14        if let Some(att) = &thread.op.attachment {
15            if !att.is_animated() {
16                println!("{}", att.url(&board));
17                count += 1;
18            }
19        }
20        for reply in &thread.last_replies {
21            if let Some(att) = &reply.attachment {
22                if !att.is_animated() {
23                    println!("{}", att.url(&board));
24                    count += 1;
25                }
26            }
27        }
28    }
29    eprintln!("/{}/: {} still-image URLs", board, count);
30    Ok(())
31}
Source

pub fn thumbnail_url(&self, board: &str) -> String

Thumbnail URL. Always a compressed JPEG, regardless of the original extension.

Source

pub fn is_video(&self) -> bool

Source

pub fn is_animated(&self) -> bool

Examples found in repository?
examples/catalog_images.rs (line 15)
7async fn main() -> chan::Result<()> {
8    let board = env::args().nth(1).unwrap_or_else(|| "po".to_string());
9    let client = chan::Client::new();
10    let catalog = client.get_board_catalog(&board).await?;
11
12    let mut count = 0usize;
13    for thread in catalog.threads() {
14        if let Some(att) = &thread.op.attachment {
15            if !att.is_animated() {
16                println!("{}", att.url(&board));
17                count += 1;
18            }
19        }
20        for reply in &thread.last_replies {
21            if let Some(att) = &reply.attachment {
22                if !att.is_animated() {
23                    println!("{}", att.url(&board));
24                    count += 1;
25                }
26            }
27        }
28    }
29    eprintln!("/{}/: {} still-image URLs", board, count);
30    Ok(())
31}
Source

pub fn is_image(&self) -> bool

True for still-image extensions.

Trait Implementations§

Source§

impl Clone for Attachment

Source§

fn clone(&self) -> Attachment

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Attachment

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Serialize for Attachment

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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<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