package sshfx

// ExtensionPair defines the extension-pair type defined in draft-ietf-secsh-filexfer-13.
// This type is backwards-compatible with how draft-ietf-secsh-filexfer-02 defines extensions.
//
// Defined in: https://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-4.2
type ExtensionPair struct {
	Name string
	Data string
}

// Len returns the number of bytes e would marshal into.
func ( *ExtensionPair) () int {
	return 4 + len(.Name) + 4 + len(.Data)
}

// MarshalInto marshals e onto the end of the given Buffer.
func ( *ExtensionPair) ( *Buffer) {
	.AppendString(.Name)
	.AppendString(.Data)
}

// MarshalBinary returns e as the binary encoding of e.
func ( *ExtensionPair) () ([]byte, error) {
	 := NewBuffer(make([]byte, 0, .Len()))
	.MarshalInto()
	return .Bytes(), nil
}

// UnmarshalFrom unmarshals an ExtensionPair from the given Buffer into e.
func ( *ExtensionPair) ( *Buffer) ( error) {
	* = ExtensionPair{
		Name: .ConsumeString(),
		Data: .ConsumeString(),
	}

	return .Err
}

// UnmarshalBinary decodes the binary encoding of ExtensionPair into e.
func ( *ExtensionPair) ( []byte) error {
	return .UnmarshalFrom(NewBuffer())
}