Skip to content

Commit be20e85

Browse files
ChrisDentondjc
authored andcommitted
Add TermInner::new constructors
1 parent 70ea3d0 commit be20e85

1 file changed

Lines changed: 28 additions & 34 deletions

File tree

src/term.rs

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,25 @@ struct TermInner {
4545
prompt_guard: Mutex<()>,
4646
}
4747

48+
impl TermInner {
49+
fn new(target: TermTarget) -> Self {
50+
Self::with_buffer(target, None)
51+
}
52+
53+
fn new_buffered(target: TermTarget) -> Self {
54+
Self::with_buffer(target, Some(vec![]))
55+
}
56+
57+
fn with_buffer(target: TermTarget, buffer: Option<Vec<u8>>) -> Self {
58+
Self {
59+
target,
60+
buffer: buffer.map(Mutex::new),
61+
prompt: RwLock::new(String::new()),
62+
prompt_guard: Mutex::new(()),
63+
}
64+
}
65+
}
66+
4867
/// The family of the terminal.
4968
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
5069
pub enum TermFamily {
@@ -153,43 +172,23 @@ impl Term {
153172
/// Return a new unbuffered terminal.
154173
#[inline]
155174
pub fn stdout() -> Term {
156-
Term::with_inner(TermInner {
157-
target: TermTarget::Stdout,
158-
buffer: None,
159-
prompt: RwLock::new(String::new()),
160-
prompt_guard: Mutex::new(()),
161-
})
175+
Term::with_inner(TermInner::new(TermTarget::Stdout))
162176
}
163177

164178
/// Return a new unbuffered terminal to stderr.
165179
#[inline]
166180
pub fn stderr() -> Term {
167-
Term::with_inner(TermInner {
168-
target: TermTarget::Stderr,
169-
buffer: None,
170-
prompt: RwLock::new(String::new()),
171-
prompt_guard: Mutex::new(()),
172-
})
181+
Term::with_inner(TermInner::new(TermTarget::Stderr))
173182
}
174183

175184
/// Return a new buffered terminal.
176185
pub fn buffered_stdout() -> Term {
177-
Term::with_inner(TermInner {
178-
target: TermTarget::Stdout,
179-
buffer: Some(Mutex::new(vec![])),
180-
prompt: RwLock::new(String::new()),
181-
prompt_guard: Mutex::new(()),
182-
})
186+
Term::with_inner(TermInner::new_buffered(TermTarget::Stdout))
183187
}
184188

185189
/// Return a new buffered terminal to stderr.
186190
pub fn buffered_stderr() -> Term {
187-
Term::with_inner(TermInner {
188-
target: TermTarget::Stderr,
189-
buffer: Some(Mutex::new(vec![])),
190-
prompt: RwLock::new(String::new()),
191-
prompt_guard: Mutex::new(()),
192-
})
191+
Term::with_inner(TermInner::new_buffered(TermTarget::Stderr))
193192
}
194193

195194
/// Return a terminal for the given Read/Write pair styled like stderr.
@@ -209,16 +208,11 @@ impl Term {
209208
R: Read + Debug + AsRawFd + Send + 'static,
210209
W: Write + Debug + AsRawFd + Send + 'static,
211210
{
212-
Term::with_inner(TermInner {
213-
target: TermTarget::ReadWritePair(ReadWritePair {
214-
read: Arc::new(Mutex::new(read)),
215-
write: Arc::new(Mutex::new(write)),
216-
style,
217-
}),
218-
buffer: None,
219-
prompt: RwLock::new(String::new()),
220-
prompt_guard: Mutex::new(()),
221-
})
211+
Term::with_inner(TermInner::new(TermTarget::ReadWritePair(ReadWritePair {
212+
read: Arc::new(Mutex::new(read)),
213+
write: Arc::new(Mutex::new(write)),
214+
style,
215+
})))
222216
}
223217

224218
/// Return the style for this terminal.

0 commit comments

Comments
 (0)