A directive in the pack template language.
      Constants
    
  The descriptions of the various types of endianness.
The descriptions of the various types of signedness.
The descriptions of the various types of sizes.
      Attributes
    
  
          
            Read
          
        
      The type of endianness of the directive.
          
            Read
          
        
      The length of this directive (used for integers).
          
            Read
          
        
      The length type of this directive (used for integers).
          
            Read
          
        
      The type of signedness of the directive.
          
            Read
          
        
      The size of the directive.
          
            Read
          
        
      A byteslice of the source string that this directive represents.
          
            Read
          
        
      The type of the directive.
          
            Read
          
        
      A symbol representing whether or not we are packing or unpacking.
          
            Read
          
        
      A symbol representing the version of Ruby.
      Class Methods
    
  
          
            3.3
          
          
            View on GitHub
            
          
        
        
          
            # File tmp/rubies/ruby-3.3.0/lib/prism/pack.rb, line 88
def initialize(version, variant, source, type, signed, endian, size, length_type, length)
  @version = version
  @variant = variant
  @source = source
  @type = type
  @signed = signed
  @endian = endian
  @size = size
  @length_type = length_type
  @length = length
end
          
        
      Initialize a new directive with the given values.
      Instance Methods
    
  
          
            #
          
          
        
      
          
            3.3
          
          
            View on GitHub
            
          
        
        
          
            # File tmp/rubies/ruby-3.3.0/lib/prism/pack.rb, line 130
def describe
  case type
  when SPACE
    "whitespace"
  when COMMENT
    "comment"
  when INTEGER
    if size == SIZE_8
      base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} integer"
    else
      base = "#{SIGNED_DESCRIPTIONS[signed]} #{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} integer"
    end
    case length_type
    when LENGTH_FIXED
      if length > 1
        base + ", x#{length}"
      else
        base
      end
    when LENGTH_MAX
      base + ", as many as possible"
    end
  when UTF8
    "UTF-8 character"
  when BER
    "BER-compressed integer"
  when FLOAT
    "#{SIZE_DESCRIPTIONS[size]} #{ENDIAN_DESCRIPTIONS[endian]} float"
  when STRING_SPACE_PADDED
    "arbitrary binary string (space padded)"
  when STRING_NULL_PADDED
    "arbitrary binary string (null padded, count is width)"
  when STRING_NULL_TERMINATED
    "arbitrary binary string (null padded, count is width), except that null is added with *"
  when STRING_MSB
    "bit string (MSB first)"
  when STRING_LSB
    "bit string (LSB first)"
  when STRING_HEX_HIGH
    "hex string (high nibble first)"
  when STRING_HEX_LOW
    "hex string (low nibble first)"
  when STRING_UU
    "UU-encoded string"
  when STRING_MIME
    "quoted printable, MIME encoding"
  when STRING_BASE64
    "base64 encoded string"
  when STRING_FIXED
    "pointer to a structure (fixed-length string)"
  when STRING_POINTER
    "pointer to a null-terminated string"
  when MOVE
    "move to absolute position"
  when BACK
    "back up a byte"
  when NULL
    "null byte"
  else
    raise
  end
end
          
        
      Provide a human-readable description of the directive.