(special_name=None, decoration='',
slot=None, add_member=False, value_macro=None, value_args=None)
| 522 | ''') |
| 523 | |
| 524 | def generate_instance_method(special_name=None, decoration='', |
| 525 | slot=None, add_member=False, value_macro=None, value_args=None): |
| 526 | name_pattern = special_name or '$name:ident' |
| 527 | name_use = special_name or '$name' |
| 528 | def impl(with_params, with_docs, with_visibility): |
| 529 | if with_docs: |
| 530 | doc_prefix = '$(#[doc=$doc:expr])*' |
| 531 | value_suffix = ', { concat!($($doc, "\\n"),*) }' |
| 532 | else: |
| 533 | doc_prefix = value_suffix = '' |
| 534 | if with_visibility: |
| 535 | visibility_capture = '$visibility:vis' |
| 536 | visibility_expansion = '$visibility' |
| 537 | else: |
| 538 | visibility_capture = '' |
| 539 | visibility_expansion = 'pub' |
| 540 | if with_params: |
| 541 | param_pattern = ', $($p:tt)+' |
| 542 | impl = '''$crate::py_argparse_parse_plist_impl!{ |
| 543 | py_class_impl_item { $class, $py, %s, %s(&$slf,) $res_type; { $($body)* } } |
| 544 | [] ($($p)+,) |
| 545 | }''' % (visibility_expansion, name_use) |
| 546 | value = '$crate::py_argparse_parse_plist_impl!{%s {%s} [] ($($p)+,)}' \ |
| 547 | % (value_macro, value_args + value_suffix) |
| 548 | else: |
| 549 | param_pattern = '' |
| 550 | impl = '$crate::py_class_impl_item! { $class, $py, %s, %s(&$slf,) $res_type; { $($body)* } [] }' \ |
| 551 | % (visibility_expansion, name_use) |
| 552 | value = '$crate::%s!{%s []}' % (value_macro, value_args + value_suffix) |
| 553 | pattern = '%s %s def %s (&$slf:ident%s) -> $res_type:ty { $( $body:tt )* }' \ |
| 554 | % (doc_prefix + decoration, visibility_capture, name_pattern, param_pattern) |
| 555 | slots = [] |
| 556 | if slot is not None: |
| 557 | slots.append((slot, value)) |
| 558 | members = [] |
| 559 | if add_member: |
| 560 | members.append((name_use, value)) |
| 561 | generate_case(pattern, new_impl=impl, new_slots=slots, new_members=members) |
| 562 | |
| 563 | # Special methods can't handle docs. |
| 564 | with_docs = (value_macro == 'py_class_instance_method') |
| 565 | for with_params in (False, True): |
| 566 | for with_visibility in (False, True): |
| 567 | impl(with_params, with_docs, with_visibility) |
| 568 | |
| 569 | def static_method(): |
| 570 | def impl(with_visibility): |
no test coverage detected