fputil

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 14, 2024 License: MIT Imports: 7 Imported by: 0

README

go-filterparams-util

Utilities for parsing and cleaning go-filterparams query.

Currently in an experimental state. Do expect bugs!

Cleaning

func GetCleanSpecs(v interface{}) []CleanSpec
func CleanQuery(queryData *filterparams.QueryData, specs ...CleanSpec) *filterparams.QueryData
func CleanFilter(filter interface{}, specs ...CleanSpec) interface{}
func CleanOrders(orders []*definition.Order, specs ...CleanSpec) []*definition.Order
Example

Defining your own cleaning specification.

package main

import (
    "github.com/ezraisw/go-filterparams-util"
)

func main() {
    //... obtain your query data
    var queryData *filterparams.QueryData

    queryData = fputil.CleanQuery(
        queryData,
        CleanSpec{Name: "username", DataType: fputil.StringDataType()},
        CleanSpec{Name: "email", DataType: fputil.StringDataType()},
        CleanSpec{Name: "age", DataType: fputil.IntDataType(0)},
    )

    //... use your query data
}

Or, you could use a struct for the specification. Do note that this does not transform the names from query parameter and is only used for validation.

package main

import (
    "github.com/ezraisw/go-filterparams-util"
)

type User struct {
    Name        string    `filterparams:"userName"`
    Email       string    `filterparams:"email"`
    Age         int       `filterparams:"age"`
    Appointment time.Time `filterparams:"appointmentTime"`
    InternalVal bool      `filterparams:"-"` // Ignore
}

var specs = GetCleanSpecs(new(User))

func main() {
    //... obtain your query data
    var queryData *filterparams.QueryData

    queryData = fputil.CleanQuery(queryData, specs...)
    //... use your query data
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CleanFilter

func CleanFilter(filter interface{}, specs ...CleanSpec) interface{}

func CleanOrders

func CleanOrders(orders []*definition.Order, specs ...CleanSpec) []*definition.Order

func CleanQuery

func CleanQuery(queryData *filterparams.QueryData, specs ...CleanSpec) *filterparams.QueryData

Types

type CleanSpec

type CleanSpec struct {
	Name     string
	DataType DataType
	Rules    []Rule
}

func GetCleanSpecs

func GetCleanSpecs(v interface{}) []CleanSpec

type DataType

type DataType interface {
	IsFilterAllowed(filter *definition.Filter) bool
	Parse(value interface{}) (interface{}, bool)
}

func BoolDataType

func BoolDataType() DataType

func FloatDataType

func FloatDataType(bits int) DataType

func IntDataType

func IntDataType(bits int) DataType

func NilableDataType

func NilableDataType(dataType DataType) DataType

func StringDataType

func StringDataType() DataType

func TimeDataType

func TimeDataType(inFormat string, outFormat string) DataType

func UintDataType

func UintDataType(bits int) DataType

type Rule

type Rule interface {
	Validate(value interface{}) bool
}

type RuleFunc

type RuleFunc func(value interface{}) bool

func (RuleFunc) Validate

func (r RuleFunc) Validate(value interface{}) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL