github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/mediatype/media-types.go (about)

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