Implement more string functions
This commit is contained in:
parent
20e0ec0e3d
commit
5aa65af3ad
@ -282,7 +282,27 @@ impl StringFunction {
|
||||
|
||||
Value::none()
|
||||
}
|
||||
StringFunction::Remove => todo!(),
|
||||
StringFunction::Remove => {
|
||||
Error::expect_argument_amount(self.name(), 2, arguments.len())?;
|
||||
|
||||
let mut string = arguments.get(0).unwrap().as_string_mut()?;
|
||||
let index = arguments.get(1).unwrap().as_integer()? as usize;
|
||||
let mut chars = string.chars().collect::<Vec<char>>();
|
||||
|
||||
if index <= chars.len() - 1 {
|
||||
let removed = chars.remove(index);
|
||||
let new_string = chars
|
||||
.iter()
|
||||
.map(|char| char.to_string())
|
||||
.collect::<String>();
|
||||
|
||||
*string = new_string;
|
||||
|
||||
Value::some(Value::string(removed))
|
||||
} else {
|
||||
Value::none()
|
||||
}
|
||||
}
|
||||
StringFunction::ReplaceRange => todo!(),
|
||||
StringFunction::Retain => todo!(),
|
||||
StringFunction::Split => {
|
||||
|
@ -47,8 +47,8 @@ impl Default for Value {
|
||||
}
|
||||
|
||||
impl Value {
|
||||
pub fn string(string: String) -> Self {
|
||||
Value::String(Arc::new(RwLock::new(string)))
|
||||
pub fn string<T: Into<String>>(string: T) -> Self {
|
||||
Value::String(Arc::new(RwLock::new(string.into())))
|
||||
}
|
||||
|
||||
pub fn r#type(&self) -> Type {
|
||||
@ -96,6 +96,10 @@ impl Value {
|
||||
Value::Option(None)
|
||||
}
|
||||
|
||||
pub fn some(value: Value) -> Self {
|
||||
Value::Option(Some(Box::new(value)))
|
||||
}
|
||||
|
||||
pub fn option(option: Option<Value>) -> Self {
|
||||
Value::Option(option.map(|value| Box::new(value)))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user