rustdv_sim/handle/
string.rs1use rustdv_gpi as gpi;
4
5use crate::{
6 handle::{HandleBase, ValueError},
7 phase,
8};
9
10#[derive(Copy, Clone)]
12pub struct StringHandle {
13 pub(super) raw: gpi::StringHandle,
14}
15
16impl From<gpi::StringHandle> for StringHandle {
17 fn from(raw: gpi::StringHandle) -> Self {
18 StringHandle { raw }
19 }
20}
21
22impl HandleBase for StringHandle {
23 fn name(&self) -> String {
24 self.raw.name()
25 }
26
27 fn full_name(&self) -> String {
28 self.raw.full_name()
29 }
30}
31
32impl StringHandle {
33 pub fn get(&self) -> Result<String, ValueError> {
34 self.raw.get()
35 }
36
37 pub fn set(&self, value: &str) -> Result<(), ValueError> {
39 phase::deny_write_in_read_only(self.raw);
40 if value.contains('\0') {
41 return Err(ValueError::InteriorNul);
42 }
43 phase::schedule(self.raw, phase::WriteVal::String(value.into()));
44 Ok(())
45 }
46
47 pub fn set_now(&self, value: &str) -> Result<(), ValueError> {
48 phase::deny_write_in_read_only(self.raw);
49 self.raw.set_now(value)
50 }
51}