Add maxlen as a named arg

This commit is contained in:
coolreader18 committed 2019-07-07 15:38:49 -05:00
1 parent 9d3fa18ec8
commit d891c87c4f
2 files changed
+17 -9

No files matched your search

+4
View File
@@ -31,3 +31,7 @@ assert d == deque([], 4)
assert deque([1, 2, 3]) * 2 == deque([1, 2, 3, 1, 2, 3])
assert deque([1, 2, 3], 4) * 2 == deque([3, 1, 2, 3])
assert deque(maxlen=3) == deque()
assert deque([1, 2, 3, 4], maxlen=2) == deque([3, 4])
+13 -9
View File
@@ -20,25 +20,29 @@ impl PyValue for PyDeque {
}
}
#[derive(FromArgs)]
struct PyDequeOptions {
#[pyarg(positional_or_keyword, default = "None")]
maxlen: Option<usize>,
}
#[pyimpl]
impl PyDeque {
#[pymethod(name = "__new__")]
fn new(
cls: PyClassRef,
iter: OptionalArg<PyIterable>,
maxlen: OptionalArg<Option<usize>>,
PyDequeOptions { maxlen }: PyDequeOptions,
vm: &VirtualMachine,
) -> PyResult<PyRef<Self>> {
let deque = if let OptionalArg::Present(iter) = iter {
iter.iter(vm)?.collect::<Result<_, _>>()?
} else {
VecDeque::new()
let py_deque = PyDeque {
deque: RefCell::default(),
maxlen: maxlen.into(),
};
PyDeque {
deque: RefCell::new(deque),
maxlen: maxlen.into_option().and_then(|x| x).into(),
if let OptionalArg::Present(iter) = iter {
py_deque.extend(iter, vm)?;
}
.into_ref_with_type(vm, cls)
py_deque.into_ref_with_type(vm, cls)
}
#[pymethod]