diff options
Diffstat (limited to 'src/cursor.rs')
| -rw-r--r-- | src/cursor.rs | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/cursor.rs b/src/cursor.rs index 5027e80..6e49cf7 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -23,24 +23,22 @@ impl<'lua> FromLuaMulti<'lua> for CursorMove { .filter(|v| v.is_integer() || v.is_number()) .map(|v| { if v.is_number() { - v.as_number().unwrap_or(0.0) + v.as_number().unwrap() as usize } else { - v.as_number().unwrap_or(0.0) + v.as_integer().unwrap() as usize } - }) - .map(|n| n as usize); + }); let second = values .get(2) .filter(|v| v.is_integer() || v.is_number()) .map(|v| { if v.is_number() { - v.as_number().unwrap() + v.as_number().unwrap() as usize } else { - v.as_number().unwrap() + v.as_integer().unwrap() as usize } - }) - .map(|n| n as usize); + }); if let Some(value) = values.get(0) { if value.is_string() { @@ -54,15 +52,19 @@ impl<'lua> FromLuaMulti<'lua> for CursorMove { "begin" => return Ok(CursorMove::Begin), "end" => return Ok(CursorMove::End), "jump" => { - if first.is_some() && second.is_some() { - return Ok(CursorMove::Jump((first.unwrap(), second.unwrap()))); + if let Some(first) = first { + if let Some(second) = second { + return Ok(CursorMove::Jump((first.max(0), second.max(0)))); + } } return Err(mlua::Error::runtime("invalid row, column values")); } "relative" => { - if first.is_some() && second.is_some() { - return Ok(CursorMove::Jump((first.unwrap(), second.unwrap()))); + if let Some(first) = first { + if let Some(second) = second { + return Ok(CursorMove::Relative((first as isize, second as isize))); + } } return Err(mlua::Error::runtime("invalid row, column values")); |