From 4f4e03206bf2d4c063d458089d7995d9c2862ec6 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Thu, 16 Sep 2021 06:37:46 +0900 Subject: [PATCH] replace Either usage to Option --- vm/src/bytesinner.rs | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/vm/src/bytesinner.rs b/vm/src/bytesinner.rs index 6790e1b61a..c414fd882e 100644 --- a/vm/src/bytesinner.rs +++ b/vm/src/bytesinner.rs @@ -1,14 +1,8 @@ -use bstr::ByteSlice; -use itertools::Itertools; -use num_bigint::BigInt; -use num_traits::ToPrimitive; - use crate::anystr::{self, AnyStr, AnyStrContainer, AnyStrWrapper}; use crate::builtins::bytearray::PyByteArray; use crate::builtins::bytes::{PyBytes, PyBytesRef}; use crate::builtins::int::{PyInt, PyIntRef}; use crate::builtins::pystr::{self, PyStr, PyStrRef}; -use crate::builtins::singletons::PyNoneRef; use crate::builtins::PyTypeRef; use crate::byteslike::try_bytes_like; use crate::cformat::CFormatBytes; @@ -21,6 +15,10 @@ use crate::{ IdProtocol, PyComparisonValue, PyIterable, PyObjectRef, PyResult, PyValue, TryFromBorrowedObject, }; +use bstr::ByteSlice; +use itertools::Itertools; +use num_bigint::BigInt; +use num_traits::ToPrimitive; use rustpython_common::hash; #[derive(Debug, Default, Clone)] @@ -209,23 +207,24 @@ impl ByteInnerPaddingOptions { #[derive(FromArgs)] pub struct ByteInnerTranslateOptions { #[pyarg(positional)] - table: Either, + table: Option, #[pyarg(any, optional)] delete: OptionalArg, } impl ByteInnerTranslateOptions { pub fn get_value(self, vm: &VirtualMachine) -> PyResult<(Vec, Vec)> { - let table = match self.table { - Either::A(v) => v.elements.to_vec(), - Either::B(_) => (0..=255).collect::>(), - }; - - if table.len() != 256 { - return Err( - vm.new_value_error("translation table must be 256 characters long".to_owned()) - ); - } + let table = self.table.map_or_else( + || Ok((0..=255).collect::>()), + |v| { + if v.elements.len() != 256 { + return Err(vm.new_value_error( + "translation table must be 256 characters long".to_owned(), + )); + } + Ok(v.elements.to_vec()) + }, + )?; let delete = match self.delete { OptionalArg::Present(byte) => byte.elements,