| 713 | |
| 714 | |
| 715 | class ChoiceEncoder(AbstractItemEncoder): |
| 716 | def encodeValue(self, value, asn1Spec, encodeFun, **options): |
| 717 | if asn1Spec is None: |
| 718 | component = value.getComponent() |
| 719 | else: |
| 720 | names = [namedType.name for namedType in asn1Spec.componentType.namedTypes |
| 721 | if namedType.name in value] |
| 722 | if len(names) != 1: |
| 723 | raise error.PyAsn1Error('%s components for Choice at %r' % (len(names) and 'Multiple ' or 'None ', value)) |
| 724 | |
| 725 | name = names[0] |
| 726 | |
| 727 | component = value[name] |
| 728 | asn1Spec = asn1Spec[name] |
| 729 | |
| 730 | return encodeFun(component, asn1Spec, **options), True, True |
| 731 | |
| 732 | |
| 733 | class AnyEncoder(OctetStringEncoder): |