mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:52:25 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			611 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			611 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package util
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"strconv"
 | |
| 	"time"
 | |
| 	"unsafe"
 | |
| )
 | |
| 
 | |
| type JSON struct{ Value any }
 | |
| 
 | |
| func (j JSON) Scan(value any) error {
 | |
| 	var buf []byte
 | |
| 
 | |
| 	switch v := value.(type) {
 | |
| 	case []byte:
 | |
| 		buf = v
 | |
| 	case string:
 | |
| 		buf = unsafe.Slice(unsafe.StringData(v), len(v))
 | |
| 	case int64:
 | |
| 		buf = strconv.AppendInt(nil, v, 10)
 | |
| 	case float64:
 | |
| 		buf = strconv.AppendFloat(nil, v, 'g', -1, 64)
 | |
| 	case time.Time:
 | |
| 		buf = append(buf, '"')
 | |
| 		buf = v.AppendFormat(buf, time.RFC3339Nano)
 | |
| 		buf = append(buf, '"')
 | |
| 	case nil:
 | |
| 		buf = []byte("null")
 | |
| 	default:
 | |
| 		panic(AssertErr())
 | |
| 	}
 | |
| 
 | |
| 	return json.Unmarshal(buf, j.Value)
 | |
| }
 |