module asn1.types.universal.characterstring;
import asn1.types.identification;

/**
    A $(MONO CharacterString), is a constructed data type, defined
    in the $(LINK https://www.itu.int, International Telecommunications Union)'s
        $(LINK https://www.itu.int/rec/T-REC-X.680/en, X.680).

    The specification defines $(MONO CharacterString) as:

    $(PRE
        CHARACTER STRING ::= [UNIVERSAL 29] SEQUENCE {
            identification CHOICE {
                syntaxes SEQUENCE {
                    abstract OBJECT IDENTIFIER,
                    transfer OBJECT IDENTIFIER },
                syntax OBJECT IDENTIFIER,
                presentation-context-id INTEGER,
                context-negotiation SEQUENCE {
                    presentation-context-id INTEGER,
                    transfer-syntax OBJECT IDENTIFIER },
                transfer-syntax OBJECT IDENTIFIER,
                fixed NULL },
            string-value OCTET STRING }
    )

    This assumes $(MONO AUTOMATIC TAGS), so all of the $(MONO identification)
    choices will be $(MONO CONTEXT-SPECIFIC) and numbered from 0 to 5.
*/
public
struct CharacterString
{
    /**
        A field indicating the the transfer syntax used to indicate the means
        by which the string-value field is encoded. Can also be used to specify
        the abstract syntax of what is encoded.
    */
    public ASN1ContextSwitchingTypeID identification;
    /// The encoded data
    public ubyte[] stringValue;
}