playwright_rs/protocol/
file_payload.rs1#[derive(Debug, Clone)]
25pub struct FilePayload {
26 pub name: String,
28 pub mime_type: String,
30 pub buffer: Vec<u8>,
32}
33
34use crate::error::Result;
35use std::fs;
36use std::path::Path;
37
38impl FilePayload {
39 pub fn builder() -> FilePayloadBuilder {
41 FilePayloadBuilder::default()
42 }
43
44 pub fn from_path<P: AsRef<Path>>(path: P) -> Result<Self> {
49 let path = path.as_ref();
50 let name = path
51 .file_name()
52 .ok_or_else(|| crate::Error::InvalidPath(format!("Path {:?} has no filename", path)))?
53 .to_string_lossy()
54 .into_owned();
55
56 let mime_type = crate::protocol::mime::from_path(path).to_string();
57 let buffer = fs::read(path)?;
58
59 Ok(Self {
60 name,
61 mime_type,
62 buffer,
63 })
64 }
65
66 pub fn from_file<P: AsRef<Path>>(path: P, mime_type: &str) -> Result<Self> {
68 let path = path.as_ref();
69 let name = path
70 .file_name()
71 .ok_or_else(|| crate::Error::InvalidPath(format!("Path {:?} has no filename", path)))?
72 .to_string_lossy()
73 .into_owned();
74
75 let buffer = fs::read(path)?;
76
77 Ok(Self {
78 name,
79 mime_type: mime_type.to_string(),
80 buffer,
81 })
82 }
83}
84
85#[derive(Debug, Clone, Default)]
87pub struct FilePayloadBuilder {
88 name: Option<String>,
89 mime_type: Option<String>,
90 buffer: Option<Vec<u8>>,
91}
92
93impl FilePayloadBuilder {
94 pub fn name(mut self, name: String) -> Self {
96 self.name = Some(name);
97 self
98 }
99
100 pub fn mime_type(mut self, mime_type: String) -> Self {
102 self.mime_type = Some(mime_type);
103 self
104 }
105
106 pub fn buffer(mut self, buffer: Vec<u8>) -> Self {
108 self.buffer = Some(buffer);
109 self
110 }
111
112 pub fn build(self) -> FilePayload {
118 FilePayload {
119 name: self.name.expect("name is required for FilePayload"),
120 mime_type: self
121 .mime_type
122 .expect("mime_type is required for FilePayload"),
123 buffer: self.buffer.expect("buffer is required for FilePayload"),
124 }
125 }
126}