package types

import (
	
	
	
	
)

type File struct {
	multipart *multipart.FileHeader
	data      []byte
	filename  string
}

func ( *File) ( *multipart.FileHeader) {
	.multipart = 
	.data = nil
	.filename = ""
}

func ( *File) ( []byte,  string) {
	.data = 
	.filename = 
	.multipart = nil
}

func ( File) () ([]byte, error) {
	,  := .Bytes()
	if  != nil {
		return nil, 
	}
	return json.Marshal()
}

func ( *File) ( []byte) error {
	return json.Unmarshal(, &.data)
}

func ( File) () ([]byte, error) {
	if .multipart != nil {
		,  := .multipart.Open()
		if  != nil {
			return nil, 
		}
		defer func() { _ = .Close() }()
		return io.ReadAll()
	}
	return .data, nil
}

func ( File) () (io.ReadCloser, error) {
	if .multipart != nil {
		return .multipart.Open()
	}
	return io.NopCloser(bytes.NewReader(.data)), nil
}

func ( File) () string {
	if .multipart != nil {
		return .multipart.Filename
	}
	return .filename
}

func ( File) () int64 {
	if .multipart != nil {
		return .multipart.Size
	}
	return int64(len(.data))
}