...

Source file src/github.com/dsoprea/go-exif/v3/undefined/accessor.go

Documentation: github.com/dsoprea/go-exif/v3/undefined

     1  package exifundefined
     2  
     3  import (
     4  	"encoding/binary"
     5  
     6  	"github.com/dsoprea/go-logging"
     7  
     8  	"github.com/dsoprea/go-exif/v3/common"
     9  )
    10  
    11  // Encode encodes the given encodeable undefined value to bytes.
    12  func Encode(value EncodeableValue, byteOrder binary.ByteOrder) (encoded []byte, unitCount uint32, err error) {
    13  	defer func() {
    14  		if state := recover(); state != nil {
    15  			err = log.Wrap(state.(error))
    16  		}
    17  	}()
    18  
    19  	encoderName := value.EncoderName()
    20  
    21  	encoder, found := encoders[encoderName]
    22  	if found == false {
    23  		log.Panicf("no encoder registered for type [%s]", encoderName)
    24  	}
    25  
    26  	encoded, unitCount, err = encoder.Encode(value, byteOrder)
    27  	log.PanicIf(err)
    28  
    29  	return encoded, unitCount, nil
    30  }
    31  
    32  // Decode constructs a value from raw encoded bytes
    33  func Decode(valueContext *exifcommon.ValueContext) (value EncodeableValue, err error) {
    34  	defer func() {
    35  		if state := recover(); state != nil {
    36  			err = log.Wrap(state.(error))
    37  		}
    38  	}()
    39  
    40  	uth := UndefinedTagHandle{
    41  		IfdPath: valueContext.IfdPath(),
    42  		TagId:   valueContext.TagId(),
    43  	}
    44  
    45  	decoder, found := decoders[uth]
    46  	if found == false {
    47  		// We have no choice but to return the error. We have no way of knowing how
    48  		// much data there is without already knowing what data-type this tag is.
    49  		return nil, exifcommon.ErrUnhandledUndefinedTypedTag
    50  	}
    51  
    52  	value, err = decoder.Decode(valueContext)
    53  	if err != nil {
    54  		if err == ErrUnparseableValue {
    55  			return nil, err
    56  		}
    57  
    58  		log.Panic(err)
    59  	}
    60  
    61  	return value, nil
    62  }
    63  

View as plain text