Sha256: 596a655351b51a93a0f46c28e3e3a836e5d6512e66b303a918538afcb3712674

Contents?: true

Size: 1.27 KB

Versions: 3

Compression:

Stored size: 1.27 KB

Contents

module RASN1
  module Types

    # ASN.1 ANY: accepts any types
    #
    # If `any#value` is `nil`, `any` will be encoded as a {Null} object.
    # @author Sylvain Daubert
    class Any < Base

      # @return [String] DER-formated string
      def to_der
        case @value
        when Base, Model
          @value.to_der
        when nil
          Null.new.to_der
        else
          @value.to_s
        end
      end

      # Parse a DER string. This method updates object: {#value} will be a DER
      # string.
      # @param [String] der DER string
      # @param [Boolean] ber if +true+, accept BER encoding
      # @return [Integer] total number of parsed bytes
      def parse!(der, ber: false)
        total_length,  = get_data(der, ber)
        @value = der[0, total_length]
        total_length
      end

      def inspect(level=0)
        str = ''
        str << '  ' * level if level > 0
        str << "#{@name} " unless @name.nil?
        if @value.nil?
          str << "(ANY) NULL"
        elsif @value.is_a?(OctetString)
          str << "(ANY) #{@value.type}: #{value.value.inspect}"
        elsif @value.class < Base
          str << "(ANY) #{@value.type}: #{value.value}"
        else
          str << "(ANY) #{value.to_s.inspect}"
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rasn1-0.6.2 lib/rasn1/types/any.rb
rasn1-0.6.1 lib/rasn1/types/any.rb
rasn1-0.6.0 lib/rasn1/types/any.rb