github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/fuzzy.go (about)

     1  package unifi
     2  
     3  import (
     4  	"strconv"
     5  )
     6  
     7  type fuzzyFloat float64
     8  
     9  func (f *fuzzyFloat) UnmarshalJSON(b []byte) error {
    10  	s := string(b)
    11  	if len(s) == 0 {
    12  		return nil
    13  	}
    14  	// quick'n'dirty unquote
    15  	if s[0] == '"' && s[len(s)-1] == '"' {
    16  		s = s[1 : len(s)-1]
    17  	}
    18  	// catch empty strings and null
    19  	if s == "" || s == "null" {
    20  		return nil
    21  	}
    22  	// try to parse
    23  	v, err := strconv.ParseFloat(s, 64)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	*f = fuzzyFloat(v)
    28  	return nil
    29  }