github.com/GeniusesGroup/libgo@v0.0.0-20220929090155-5ff932cb408e/mediatype/media-types.go (about)

     1  /* For license and copyright information please see the LEGAL file in the code repository */
     2  
     3  package mediatype
     4  
     5  import (
     6  	"github.com/GeniusesGroup/libgo/protocol"
     7  )
     8  
     9  func RegisterMediaType(mt protocol.MediaType) {
    10  	// Check due to os can be nil almost in tests and benchmarks build
    11  	if protocol.OS != nil {
    12  		protocol.OS.RegisterMediaType(mt)
    13  	}
    14  }
    15  
    16  // MediaTypes store all data structure details
    17  type MediaTypes struct{}
    18  
    19  // RegisterMediaType register given MediaType to the application
    20  func (dss *MediaTypes) RegisterMediaType(mt protocol.MediaType) {
    21  	if mt.MainType() == "" && mt.SubType() == "" {
    22  		panic("Mediatype doesn't has main and sub type. Can't register empty mediatype.")
    23  	}
    24  	register(mt)
    25  }
    26  
    27  func (dss *MediaTypes) GetMediaTypeByID(id protocol.MediaTypeID) protocol.MediaType { return ByID(id) }
    28  func (dss *MediaTypes) GetMediaTypeByFileExtension(ex string) protocol.MediaType {
    29  	return ByFileExtension(ex)
    30  }
    31  func (dss *MediaTypes) GetMediaType(mediaType string) protocol.MediaType {
    32  	return ByMediaType(mediaType)
    33  }
    34  
    35  var (
    36  	poolByMediaType     = map[string]protocol.MediaType{}
    37  	poolByID            = map[protocol.MediaTypeID]protocol.MediaType{}
    38  	poolByFileExtension = map[string]protocol.MediaType{}
    39  )
    40  
    41  func ByMediaType(mediaType string) protocol.MediaType { return poolByMediaType[mediaType] }
    42  func ByID(id protocol.MediaTypeID) protocol.MediaType { return poolByID[id] }
    43  func ByFileExtension(ex string) protocol.MediaType    { return poolByFileExtension[ex] }
    44  
    45  func register(mt protocol.MediaType) {
    46  	// TODO::: lock??
    47  	poolByMediaType[mt.ToString()] = mt
    48  	poolByID[mt.ID()] = mt
    49  	var fe = mt.FileExtension()
    50  	if fe != "" {
    51  		poolByFileExtension[fe] = mt
    52  	}
    53  }