(vm: &VirtualMachine, args: &mut FuncArgs)
| 564 | |
| 565 | impl FromArgs for FormatOptions { |
| 566 | fn from_args(vm: &VirtualMachine, args: &mut FuncArgs) -> Result<Self, ArgumentError> { |
| 567 | let mut res = Self::default(); |
| 568 | if let Some(dialect) = args.kwargs.swap_remove("dialect") { |
| 569 | res.dialect = prase_dialect_item_from_arg(vm, dialect)?; |
| 570 | } else if let Some(dialect) = args.args.first() { |
| 571 | res.dialect = prase_dialect_item_from_arg(vm, dialect.clone())?; |
| 572 | } else { |
| 573 | res.dialect = DialectItem::None; |
| 574 | }; |
| 575 | |
| 576 | if let Some(delimiter) = args.kwargs.swap_remove("delimiter") { |
| 577 | res.delimiter = Some(parse_delimiter_from_obj(vm, &delimiter)?); |
| 578 | } |
| 579 | |
| 580 | if let Some(escapechar) = args.kwargs.swap_remove("escapechar") { |
| 581 | res.escapechar = match_class!(match escapechar { |
| 582 | s @ PyStr => |
| 583 | Some(s.as_bytes().iter().copied().exactly_one().map_err(|_| { |
| 584 | let msg = r#""escapechar" must be a 1-character string"#; |
| 585 | vm.new_type_error(msg.to_owned()) |
| 586 | })?), |
| 587 | _ => None, |
| 588 | }) |
| 589 | }; |
| 590 | if let Some(lineterminator) = args.kwargs.swap_remove("lineterminator") { |
| 591 | res.lineterminator = Some(csv_core::Terminator::Any( |
| 592 | lineterminator |
| 593 | .try_to_value::<&str>(vm)? |
| 594 | .bytes() |
| 595 | .exactly_one() |
| 596 | .map_err(|_| { |
| 597 | let msg = r#""lineterminator" must be a 1-character string"#; |
| 598 | vm.new_type_error(msg.to_owned()) |
| 599 | })?, |
| 600 | )) |
| 601 | }; |
| 602 | if let Some(doublequote) = args.kwargs.swap_remove("doublequote") { |
| 603 | res.doublequote = Some(doublequote.try_to_bool(vm).map_err(|_| { |
| 604 | let msg = r#""doublequote" must be a bool"#; |
| 605 | vm.new_type_error(msg.to_owned()) |
| 606 | })?) |
| 607 | }; |
| 608 | if let Some(skipinitialspace) = args.kwargs.swap_remove("skipinitialspace") { |
| 609 | res.skipinitialspace = Some(skipinitialspace.try_to_bool(vm).map_err(|_| { |
| 610 | let msg = r#""skipinitialspace" must be a bool"#; |
| 611 | vm.new_type_error(msg.to_owned()) |
| 612 | })?) |
| 613 | }; |
| 614 | if let Some(quoting) = args.kwargs.swap_remove("quoting") { |
| 615 | res.quoting = match_class!(match quoting { |
| 616 | i @ PyInt => |
| 617 | Some(i.try_to_primitive::<isize>(vm)?.try_into().map_err(|_e| { |
| 618 | ArgumentError::InvalidKeywordArgument("quoting".to_string()) |
| 619 | })?), |
| 620 | _ => { |
| 621 | // let msg = r#""quoting" must be a int enum"#; |
| 622 | return Err(ArgumentError::InvalidKeywordArgument("quoting".to_string())); |
| 623 | } |
nothing calls this directly
no test coverage detected