package main
import (
 "bytes"
 "encoding/json"
 "fmt"
 "github.com/minio/madmin-go/v3"
 "github.com/pgsty/silo-pkg/v3/policy"
)
func main() {
 for _, raw := range []string{`{"bucket":"b"}`, `{"bucket":"b","policy":null,"quota":null}`, `{"bucket":"b","policy":{"Version":"2012-10-17","Statement":[]},"quota":{}}`} {
  var x madmin.SRBucketMeta
  if err:=json.Unmarshal([]byte(raw),&x);err!=nil{panic(err)}
  fmt.Printf("wire=%s\nPolicy nil=%t bytes=%q; Quota nil=%t bytes=%q\n",raw,x.Policy==nil,[]byte(x.Policy),x.Quota==nil,[]byte(x.Quota))
  if len(x.Policy)>0 && !bytes.Equal(x.Policy,[]byte("null")) {
   p,err:=policy.ParseBucketPolicyConfig(bytes.NewReader(x.Policy),"b")
   if err!=nil{panic(err)}
   fmt.Printf("Policy parses successfully, IsEmpty=%t\n",p.IsEmpty())
  }
 }
 for _, v := range []json.RawMessage{nil,{},[]byte("null")} {
  b,err:=json.Marshal(madmin.SRBucketMeta{Bucket:"b",Policy:v});if err!=nil{panic(err)}
  fmt.Printf("encoded raw=%q -> %s\n",[]byte(v),b)
 }
}
