Home / File/ etag.go — fiber Source File

etag.go — fiber Source File

Architecture documentation for etag.go, a go file in the fiber codebase. 1 imports, 0 dependents.

File go FiberCore Adapters 1 imports 4 functions 2 classes

Entity Profile

Dependency Diagram

graph LR
  e660d89f_158e_a31e_1a40_def5af9d743a["etag.go"]
  c0b86961_3ef1_0168_52fc_98627566ed27["bytes"]
  e660d89f_158e_a31e_1a40_def5af9d743a --> c0b86961_3ef1_0168_52fc_98627566ed27
  style e660d89f_158e_a31e_1a40_def5af9d743a fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

package etag

import (
	"bytes"
	"hash/crc32"
	"math"
	"slices"

	"github.com/gofiber/fiber/v3"
	"github.com/valyala/bytebufferpool"
)

var (
	weakPrefix = []byte("W/")
	crc32q     = crc32.MakeTable(0xD5828281)
)

// Generate returns a strong ETag for body.
func Generate(body []byte) []byte {
	if len(body) > math.MaxUint32 {
		return nil
	}
	bb := bytebufferpool.Get()
	defer bytebufferpool.Put(bb)
	b := bb.B[:0]
	b = append(b, '"')
	b = appendUint(b, uint32(len(body))) // #nosec G115 -- length checked above
	b = append(b, '-')
	b = appendUint(b, crc32.Checksum(body, crc32q))
	b = append(b, '"')
	return slices.Clone(b)
}

// GenerateWeak returns a weak ETag for body.
func GenerateWeak(body []byte) []byte {
	tag := Generate(body)
	if tag == nil {
		return nil
	}
	return append(weakPrefix, tag...)
}

// New creates a new middleware handler
func New(config ...Config) fiber.Handler {
	// Set default config
	cfg := configDefault(config...)

	normalizedHeaderETag := []byte("Etag")

	// Return new handler
	return func(c fiber.Ctx) error {
		// Don't execute middleware if Next returns true
		if cfg.Next != nil && cfg.Next(c) {
			return c.Next()
		}

		// Return err if next handler returns one
		if err := c.Next(); err != nil {
			return err
		}
// ... (77 more lines)

Domain

Subdomains

Classes

Dependencies

  • bytes

Frequently Asked Questions

What does etag.go do?
etag.go is a source file in the fiber codebase, written in go. It belongs to the FiberCore domain, Adapters subdomain.
What functions are defined in etag.go?
etag.go defines 4 function(s): Generate, GenerateWeak, New, appendUint.
What does etag.go depend on?
etag.go imports 1 module(s): bytes.
Where is etag.go in the architecture?
etag.go is located at middleware/etag/etag.go (domain: FiberCore, subdomain: Adapters, directory: middleware/etag).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free