2021-08-12 19:03:24 +00:00
package exifundefined
import (
"fmt"
"encoding/binary"
"github.com/dsoprea/go-logging"
2022-01-23 13:41:31 +00:00
"github.com/dsoprea/go-exif/v3/common"
2021-08-12 19:03:24 +00:00
)
type TagExifA300FileSource uint32
func ( TagExifA300FileSource ) EncoderName ( ) string {
return "CodecExifA300FileSource"
}
func ( af TagExifA300FileSource ) String ( ) string {
return fmt . Sprintf ( "0x%08x" , uint32 ( af ) )
}
const (
TagUndefinedType_A300_SceneType_Others TagExifA300FileSource = 0
TagUndefinedType_A300_SceneType_ScannerOfTransparentType TagExifA300FileSource = 1
TagUndefinedType_A300_SceneType_ScannerOfReflexType TagExifA300FileSource = 2
TagUndefinedType_A300_SceneType_Dsc TagExifA300FileSource = 3
)
type CodecExifA300FileSource struct {
}
func ( CodecExifA300FileSource ) Encode ( value interface { } , byteOrder binary . ByteOrder ) ( encoded [ ] byte , unitCount uint32 , err error ) {
defer func ( ) {
if state := recover ( ) ; state != nil {
err = log . Wrap ( state . ( error ) )
}
} ( )
st , ok := value . ( TagExifA300FileSource )
if ok == false {
log . Panicf ( "can only encode a TagExifA300FileSource" )
}
ve := exifcommon . NewValueEncoder ( byteOrder )
ed , err := ve . Encode ( [ ] uint32 { uint32 ( st ) } )
log . PanicIf ( err )
// TODO(dustin): Confirm this size against the specification. It's non-specific about what type it is, but it looks to be no more than a single integer scalar. So, we're assuming it's a LONG.
return ed . Encoded , 1 , nil
}
func ( CodecExifA300FileSource ) Decode ( valueContext * exifcommon . ValueContext ) ( value EncodeableValue , err error ) {
defer func ( ) {
if state := recover ( ) ; state != nil {
err = log . Wrap ( state . ( error ) )
}
} ( )
valueContext . SetUndefinedValueType ( exifcommon . TypeLong )
valueLongs , err := valueContext . ReadLongs ( )
log . PanicIf ( err )
return TagExifA300FileSource ( valueLongs [ 0 ] ) , nil
}
func init ( ) {
registerEncoder (
TagExifA300FileSource ( 0 ) ,
CodecExifA300FileSource { } )
registerDecoder (
exifcommon . IfdExifStandardIfdIdentity . UnindexedString ( ) ,
0xa300 ,
CodecExifA300FileSource { } )
}