Generate UnmarshalJSON to handle emptyStringInt types

This commit changes the code generator to generate a `UnmarshalJSON` for each
struct, so that if unmarshalled it properly handles UniFis varying integer values
via the `emptyStringInt` type.

Structs not including a field of `int` type will still have the function generated,
but it will effectively do nothing.

Fixes #18
This commit is contained in:
Hendrik "T4cC0re" Meyer
2021-01-02 09:40:52 +01:00
committed by Paul Tyng
parent c5ff8c8593
commit 4aed7d703d
67 changed files with 2298 additions and 155 deletions

View File

@@ -2,6 +2,18 @@
{{ define "field" }}
{{ .FieldName }} {{ if .IsArray }}[]{{end}}{{ .FieldType }} `json:"{{ .JSONName }}{{ if .OmitEmpty }},omitempty{{ end }}"` {{ if .FieldValidation }}// {{ .FieldValidation }}{{ end }} {{- end }}
{{ define "field-emptyStringInt" }}
{{- if ne .FieldType "int" }}{{else}}
{{ .FieldName }} {{ if .IsArray }}[]{{end}}emptyStringInt `json:"{{ .JSONName }}{{ if .OmitEmpty }}{{ end }}"`{{ end }} {{- end }}
{{ define "typecast" }}
{{- if eq .FieldType "int" }}{{- if .IsArray }}
dst.{{ .FieldName }}= make([]int, len(aux.{{ .FieldName }}))
for i, v := range aux.{{ .FieldName }} {
dst.{{ .FieldName }}[i] = int(v)
}
{{- else }}
dst.{{ .FieldName }} = int(aux.{{ .FieldName }})
{{- end }}{{- end }}{{- end }}
{{ define "field-embed" }}
{{ .FieldName }} {{ if .IsArray }}[]{{end}}{{ if not .Fields }}{{ .FieldType }}{{ else }}struct {
{{ range $fk, $fv := .Fields }}{{ if not $fv }}
@@ -14,13 +26,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
{{ if embedTypes -}}
@@ -36,6 +50,28 @@ type {{ $k }} struct {
{{ range $fk, $fv := $v.Fields }}{{ if not $fv }}
{{ else }}{{- template "field" $fv }}{{ end }}{{ end }}
}
func (dst *{{ $k }}) UnmarshalJSON(b []byte) error {
type Alias {{ $k }}
aux := &struct {
{{- range $fk, $fv := $v.Fields }}{{ if not $fv }}
{{- else }}{{- template "field-emptyStringInt" $fv }}{{ end }}{{- end }}
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
{{- range $fk, $fv := $v.Fields }}{{ if not $fv }}
{{- else }}{{- template "typecast" $fv }}{{ end }}{{ end }}
return nil
}
{{ end }}
{{- end -}}

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Account struct {
@@ -32,6 +34,29 @@ type Account struct {
XPassword string `json:"x_password,omitempty"`
}
func (dst *Account) UnmarshalJSON(b []byte) error {
type Alias Account
aux := &struct {
TunnelMediumType emptyStringInt `json:"tunnel_medium_type"`
TunnelType emptyStringInt `json:"tunnel_type"`
VLAN emptyStringInt `json:"vlan"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.TunnelMediumType = int(aux.TunnelMediumType)
dst.TunnelType = int(aux.TunnelType)
dst.VLAN = int(aux.VLAN)
return nil
}
func (c *Client) listAccount(ctx context.Context, site string) ([]Account, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -3,33 +3,8 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
func (dst *Account) UnmarshalJSON(b []byte) error {
type Alias Account
aux := &struct {
TunnelType emptyStringInt `json:"tunnel_type"`
TunnelMediumType emptyStringInt `json:"tunnel_medium_type"`
VLAN emptyStringInt `json:"vlan"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.TunnelType = int(aux.TunnelType)
dst.TunnelMediumType = int(aux.TunnelMediumType)
dst.VLAN = int(aux.VLAN)
return nil
}
func (dst *Account) MarshalJSON() ([]byte, error) {
type Alias Account
aux := &struct {

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type BroadcastGroup struct {
@@ -27,6 +29,22 @@ type BroadcastGroup struct {
Name string `json:"name,omitempty"`
}
func (dst *BroadcastGroup) UnmarshalJSON(b []byte) error {
type Alias BroadcastGroup
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listBroadcastGroup(ctx context.Context, site string) ([]BroadcastGroup, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type ChannelPlan struct {
@@ -36,18 +38,74 @@ type ChannelPlan struct {
SiteBlacklistedChannels []ChannelPlanSiteBlacklistedChannels `json:"site_blacklisted_channels,omitempty"`
}
func (dst *ChannelPlan) UnmarshalJSON(b []byte) error {
type Alias ChannelPlan
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type ChannelPlanApBlacklistedChannels struct {
Channel int `json:"channel,omitempty"` // 36|38|40|42|44|46|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140|144|149|153|157|161|165|183|184|185|187|188|189|192|196
MAC string `json:"mac,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$
Timestamp int `json:"timestamp,omitempty"` // [1-9][0-9]{12}
}
func (dst *ChannelPlanApBlacklistedChannels) UnmarshalJSON(b []byte) error {
type Alias ChannelPlanApBlacklistedChannels
aux := &struct {
Channel emptyStringInt `json:"channel"`
Timestamp emptyStringInt `json:"timestamp"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Channel = int(aux.Channel)
dst.Timestamp = int(aux.Timestamp)
return nil
}
type ChannelPlanCoupling struct {
Rssi int `json:"rssi,omitempty"`
Source string `json:"source,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2}).*$
Target string `json:"target,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2}).*$
}
func (dst *ChannelPlanCoupling) UnmarshalJSON(b []byte) error {
type Alias ChannelPlanCoupling
aux := &struct {
Rssi emptyStringInt `json:"rssi"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Rssi = int(aux.Rssi)
return nil
}
type ChannelPlanRadioTable struct {
BackupChannel string `json:"backup_channel,omitempty"` // [0-9]|[1][0-4]|16|34|36|38|40|42|44|46|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140|144|149|153|157|161|165|183|184|185|187|188|189|192|196|auto
Channel string `json:"channel,omitempty"` // [0-9]|[1][0-4]|16|34|36|38|40|42|44|46|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140|144|149|153|157|161|165|183|184|185|187|188|189|192|196|auto
@@ -58,16 +116,72 @@ type ChannelPlanRadioTable struct {
Width int `json:"width,omitempty"` // 20|40|80|160
}
func (dst *ChannelPlanRadioTable) UnmarshalJSON(b []byte) error {
type Alias ChannelPlanRadioTable
aux := &struct {
Width emptyStringInt `json:"width"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Width = int(aux.Width)
return nil
}
type ChannelPlanSatisfactionTable struct {
DeviceMAC string `json:"device_mac,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$
Satisfaction float64 `json:"satisfaction,omitempty"`
}
func (dst *ChannelPlanSatisfactionTable) UnmarshalJSON(b []byte) error {
type Alias ChannelPlanSatisfactionTable
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type ChannelPlanSiteBlacklistedChannels struct {
Channel int `json:"channel,omitempty"` // 36|38|40|42|44|46|48|52|56|60|64|100|104|108|112|116|120|124|128|132|136|140|144|149|153|157|161|165|183|184|185|187|188|189|192|196
Timestamp int `json:"timestamp,omitempty"` // [1-9][0-9]{12}
}
func (dst *ChannelPlanSiteBlacklistedChannels) UnmarshalJSON(b []byte) error {
type Alias ChannelPlanSiteBlacklistedChannels
aux := &struct {
Channel emptyStringInt `json:"channel"`
Timestamp emptyStringInt `json:"timestamp"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Channel = int(aux.Channel)
dst.Timestamp = int(aux.Timestamp)
return nil
}
func (c *Client) listChannelPlan(ctx context.Context, site string) ([]ChannelPlan, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Dashboard struct {
@@ -30,6 +32,22 @@ type Dashboard struct {
Name string `json:"name,omitempty"`
}
func (dst *Dashboard) UnmarshalJSON(b []byte) error {
type Alias Dashboard
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type DashboardModules struct {
Config string `json:"config,omitempty"`
ID string `json:"id"`
@@ -37,6 +55,22 @@ type DashboardModules struct {
Restrictions string `json:"restrictions,omitempty"`
}
func (dst *DashboardModules) UnmarshalJSON(b []byte) error {
type Alias DashboardModules
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listDashboard(ctx context.Context, site string) ([]Dashboard, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Device struct {
@@ -81,6 +83,35 @@ type Device struct {
Y float64 `json:"y,omitempty"`
}
func (dst *Device) UnmarshalJSON(b []byte) error {
type Alias Device
aux := &struct {
LcmBrightness emptyStringInt `json:"lcm_brightness"`
LcmIDleTimeout emptyStringInt `json:"lcm_idle_timeout"`
LedOverrideColorBrightness emptyStringInt `json:"led_override_color_brightness"`
LteSimPin emptyStringInt `json:"lte_sim_pin"`
LteSoftLimit emptyStringInt `json:"lte_soft_limit"`
Volume emptyStringInt `json:"volume"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.LcmBrightness = int(aux.LcmBrightness)
dst.LcmIDleTimeout = int(aux.LcmIDleTimeout)
dst.LedOverrideColorBrightness = int(aux.LedOverrideColorBrightness)
dst.LteSimPin = int(aux.LteSimPin)
dst.LteSoftLimit = int(aux.LteSoftLimit)
dst.Volume = int(aux.Volume)
return nil
}
type DeviceConfigNetwork struct {
BondingEnabled bool `json:"bonding_enabled,omitempty"`
DNS1 string `json:"dns1,omitempty"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$|^$
@@ -92,11 +123,43 @@ type DeviceConfigNetwork struct {
Type string `json:"type,omitempty"` // dhcp|static
}
func (dst *DeviceConfigNetwork) UnmarshalJSON(b []byte) error {
type Alias DeviceConfigNetwork
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type DeviceEthernetOverrides struct {
Ifname string `json:"ifname,omitempty"` // eth[0-9]{1,2}
NetworkGroup string `json:"networkgroup,omitempty"` // LAN[2-8]?|WAN[2]?
}
func (dst *DeviceEthernetOverrides) UnmarshalJSON(b []byte) error {
type Alias DeviceEthernetOverrides
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type DeviceOutletOverrides struct {
CycleEnabled bool `json:"cycle_enabled,omitempty"`
Index int `json:"index,omitempty"`
@@ -104,6 +167,25 @@ type DeviceOutletOverrides struct {
RelayState bool `json:"relay_state,omitempty"`
}
func (dst *DeviceOutletOverrides) UnmarshalJSON(b []byte) error {
type Alias DeviceOutletOverrides
aux := &struct {
Index emptyStringInt `json:"index"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Index = int(aux.Index)
return nil
}
type DevicePortOverrides struct {
AggregateNumPorts int `json:"aggregate_num_ports,omitempty"` // [2-6]
Autoneg bool `json:"autoneg,omitempty"`
@@ -141,6 +223,55 @@ type DevicePortOverrides struct {
StpPortMode bool `json:"stp_port_mode,omitempty"`
}
func (dst *DevicePortOverrides) UnmarshalJSON(b []byte) error {
type Alias DevicePortOverrides
aux := &struct {
AggregateNumPorts emptyStringInt `json:"aggregate_num_ports"`
Dot1XIDleTimeout emptyStringInt `json:"dot1x_idle_timeout"`
EgressRateLimitKbps emptyStringInt `json:"egress_rate_limit_kbps"`
MirrorPortIDX emptyStringInt `json:"mirror_port_idx"`
PortIDX emptyStringInt `json:"port_idx"`
PriorityQueue1Level emptyStringInt `json:"priority_queue1_level"`
PriorityQueue2Level emptyStringInt `json:"priority_queue2_level"`
PriorityQueue3Level emptyStringInt `json:"priority_queue3_level"`
PriorityQueue4Level emptyStringInt `json:"priority_queue4_level"`
Speed emptyStringInt `json:"speed"`
StormctrlBroadcastastLevel emptyStringInt `json:"stormctrl_bcast_level"`
StormctrlBroadcastastRate emptyStringInt `json:"stormctrl_bcast_rate"`
StormctrlMcastLevel emptyStringInt `json:"stormctrl_mcast_level"`
StormctrlMcastRate emptyStringInt `json:"stormctrl_mcast_rate"`
StormctrlUcastLevel emptyStringInt `json:"stormctrl_ucast_level"`
StormctrlUcastRate emptyStringInt `json:"stormctrl_ucast_rate"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.AggregateNumPorts = int(aux.AggregateNumPorts)
dst.Dot1XIDleTimeout = int(aux.Dot1XIDleTimeout)
dst.EgressRateLimitKbps = int(aux.EgressRateLimitKbps)
dst.MirrorPortIDX = int(aux.MirrorPortIDX)
dst.PortIDX = int(aux.PortIDX)
dst.PriorityQueue1Level = int(aux.PriorityQueue1Level)
dst.PriorityQueue2Level = int(aux.PriorityQueue2Level)
dst.PriorityQueue3Level = int(aux.PriorityQueue3Level)
dst.PriorityQueue4Level = int(aux.PriorityQueue4Level)
dst.Speed = int(aux.Speed)
dst.StormctrlBroadcastastLevel = int(aux.StormctrlBroadcastastLevel)
dst.StormctrlBroadcastastRate = int(aux.StormctrlBroadcastastRate)
dst.StormctrlMcastLevel = int(aux.StormctrlMcastLevel)
dst.StormctrlMcastRate = int(aux.StormctrlMcastRate)
dst.StormctrlUcastLevel = int(aux.StormctrlUcastLevel)
dst.StormctrlUcastRate = int(aux.StormctrlUcastRate)
return nil
}
type DeviceRadioTable struct {
AntennaGain int `json:"antenna_gain,omitempty"` // ^-?([0-9]|[1-9][0-9])
AntennaID int `json:"antenna_id,omitempty"` // -1|[0-9]
@@ -161,17 +292,85 @@ type DeviceRadioTable struct {
VwireEnabled bool `json:"vwire_enabled,omitempty"`
}
func (dst *DeviceRadioTable) UnmarshalJSON(b []byte) error {
type Alias DeviceRadioTable
aux := &struct {
AntennaGain emptyStringInt `json:"antenna_gain"`
AntennaID emptyStringInt `json:"antenna_id"`
BackupChannel emptyStringInt `json:"backup_channel"`
Channel emptyStringInt `json:"channel"`
Maxsta emptyStringInt `json:"maxsta"`
MinRssi emptyStringInt `json:"min_rssi"`
SensLevel emptyStringInt `json:"sens_level"`
TxPower emptyStringInt `json:"tx_power"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.AntennaGain = int(aux.AntennaGain)
dst.AntennaID = int(aux.AntennaID)
dst.BackupChannel = int(aux.BackupChannel)
dst.Channel = int(aux.Channel)
dst.Maxsta = int(aux.Maxsta)
dst.MinRssi = int(aux.MinRssi)
dst.SensLevel = int(aux.SensLevel)
dst.TxPower = int(aux.TxPower)
return nil
}
type DeviceRpsOverride struct {
PowerManagementMode string `json:"power_management_mode,omitempty"` // dynamic|static
RpsPortTable []DeviceRpsPortTable `json:"rps_port_table,omitempty"`
}
func (dst *DeviceRpsOverride) UnmarshalJSON(b []byte) error {
type Alias DeviceRpsOverride
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type DeviceRpsPortTable struct {
Name string `json:"name,omitempty"` // .{0,32}
PortIDX int `json:"port_idx,omitempty"` // [1-6]
PortMode string `json:"port_mode,omitempty"` // auto|force_active|manual|disabled
}
func (dst *DeviceRpsPortTable) UnmarshalJSON(b []byte) error {
type Alias DeviceRpsPortTable
aux := &struct {
PortIDX emptyStringInt `json:"port_idx"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.PortIDX = int(aux.PortIDX)
return nil
}
type DeviceWLANOverrides struct {
Enabled bool `json:"enabled,omitempty"`
Name string `json:"name,omitempty"` // .{1,32}
@@ -185,6 +384,25 @@ type DeviceWLANOverrides struct {
XPassphrase string `json:"x_passphrase,omitempty"` // [\x20-\x7E]{8,63}|[0-9a-fA-F]{64}
}
func (dst *DeviceWLANOverrides) UnmarshalJSON(b []byte) error {
type Alias DeviceWLANOverrides
aux := &struct {
VLAN emptyStringInt `json:"vlan"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.VLAN = int(aux.VLAN)
return nil
}
func (c *Client) listDevice(ctx context.Context, site string) ([]Device, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type DHCPOption struct {
@@ -30,6 +32,25 @@ type DHCPOption struct {
Width int `json:"width,omitempty"` // ^(8|16|32)$
}
func (dst *DHCPOption) UnmarshalJSON(b []byte) error {
type Alias DHCPOption
aux := &struct {
Width emptyStringInt `json:"width"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Width = int(aux.Width)
return nil
}
func (c *Client) listDHCPOption(ctx context.Context, site string) ([]DHCPOption, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type DpiApp struct {
@@ -33,6 +35,37 @@ type DpiApp struct {
QOSRateMaxUp int `json:"qos_rate_max_up,omitempty"` // -1|[2-9]|[1-9][0-9]{1,4}|100000|10[0-1][0-9]{3}|102[0-3][0-9]{2}|102400
}
func (dst *DpiApp) UnmarshalJSON(b []byte) error {
type Alias DpiApp
aux := &struct {
Apps []emptyStringInt `json:"apps"`
Cats []emptyStringInt `json:"cats"`
QOSRateMaxDown emptyStringInt `json:"qos_rate_max_down"`
QOSRateMaxUp emptyStringInt `json:"qos_rate_max_up"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Apps = make([]int, len(aux.Apps))
for i, v := range aux.Apps {
dst.Apps[i] = int(v)
}
dst.Cats = make([]int, len(aux.Cats))
for i, v := range aux.Cats {
dst.Cats[i] = int(v)
}
dst.QOSRateMaxDown = int(aux.QOSRateMaxDown)
dst.QOSRateMaxUp = int(aux.QOSRateMaxUp)
return nil
}
func (c *Client) listDpiApp(ctx context.Context, site string) ([]DpiApp, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type DpiGroup struct {
@@ -28,6 +30,22 @@ type DpiGroup struct {
Name string `json:"name,omitempty"` // .{1,128}
}
func (dst *DpiGroup) UnmarshalJSON(b []byte) error {
type Alias DpiGroup
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listDpiGroup(ctx context.Context, site string) ([]DpiGroup, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type DynamicDNS struct {
@@ -33,6 +35,22 @@ type DynamicDNS struct {
XPassword string `json:"x_password,omitempty"` // ^[^"' ]+$
}
func (dst *DynamicDNS) UnmarshalJSON(b []byte) error {
type Alias DynamicDNS
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listDynamicDNS(ctx context.Context, site string) ([]DynamicDNS, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type FirewallGroup struct {
@@ -28,6 +30,22 @@ type FirewallGroup struct {
Name string `json:"name,omitempty"` // .{1,64}
}
func (dst *FirewallGroup) UnmarshalJSON(b []byte) error {
type Alias FirewallGroup
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listFirewallGroup(ctx context.Context, site string) ([]FirewallGroup, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type FirewallRule struct {
@@ -64,6 +66,25 @@ type FirewallRule struct {
WeekdaysNegate bool `json:"weekdays_negate"`
}
func (dst *FirewallRule) UnmarshalJSON(b []byte) error {
type Alias FirewallRule
aux := &struct {
RuleIndex emptyStringInt `json:"rule_index"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.RuleIndex = int(aux.RuleIndex)
return nil
}
func (c *Client) listFirewallRule(ctx context.Context, site string) ([]FirewallRule, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -2,30 +2,8 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
func (dst *FirewallRule) UnmarshalJSON(b []byte) error {
type Alias FirewallRule
aux := &struct {
RuleIndex emptyStringInt `json:"rule_index"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.RuleIndex = int(aux.RuleIndex)
return nil
}
func (c *Client) ListFirewallRule(ctx context.Context, site string) ([]FirewallRule, error) {
return c.listFirewallRule(ctx, site)
}

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type HeatMap struct {
@@ -29,6 +31,22 @@ type HeatMap struct {
Type string `json:"type,omitempty"` // download|upload
}
func (dst *HeatMap) UnmarshalJSON(b []byte) error {
type Alias HeatMap
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listHeatMap(ctx context.Context, site string) ([]HeatMap, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type HeatMapPoint struct {
@@ -30,6 +32,22 @@ type HeatMapPoint struct {
Y float64 `json:"y,omitempty"`
}
func (dst *HeatMapPoint) UnmarshalJSON(b []byte) error {
type Alias HeatMapPoint
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listHeatMapPoint(ctx context.Context, site string) ([]HeatMapPoint, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Hotspot2Conf struct {
@@ -75,32 +77,169 @@ type Hotspot2Conf struct {
VenueType int `json:"venue_type,omitempty"` // 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15
}
func (dst *Hotspot2Conf) UnmarshalJSON(b []byte) error {
type Alias Hotspot2Conf
aux := &struct {
AnqpDomainID emptyStringInt `json:"anqp_domain_id"`
DeauthReqTimeout emptyStringInt `json:"deauth_req_timeout"`
GasComebackDelay emptyStringInt `json:"gas_comeback_delay"`
GasFragLimit emptyStringInt `json:"gas_frag_limit"`
IPaddrTypeAvailV4 emptyStringInt `json:"ipaddr_type_avail_v4"`
IPaddrTypeAvailV6 emptyStringInt `json:"ipaddr_type_avail_v6"`
MetricsDownlinkLoad emptyStringInt `json:"metrics_downlink_load"`
MetricsDownlinkSpeed emptyStringInt `json:"metrics_downlink_speed"`
MetricsMeasurement emptyStringInt `json:"metrics_measurement"`
MetricsUplinkLoad emptyStringInt `json:"metrics_uplink_load"`
MetricsUplinkSpeed emptyStringInt `json:"metrics_uplink_speed"`
NetworkAuthType emptyStringInt `json:"network_auth_type"`
NetworkType emptyStringInt `json:"network_type"`
TCTimestamp emptyStringInt `json:"t_c_timestamp"`
VenueGroup emptyStringInt `json:"venue_group"`
VenueType emptyStringInt `json:"venue_type"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.AnqpDomainID = int(aux.AnqpDomainID)
dst.DeauthReqTimeout = int(aux.DeauthReqTimeout)
dst.GasComebackDelay = int(aux.GasComebackDelay)
dst.GasFragLimit = int(aux.GasFragLimit)
dst.IPaddrTypeAvailV4 = int(aux.IPaddrTypeAvailV4)
dst.IPaddrTypeAvailV6 = int(aux.IPaddrTypeAvailV6)
dst.MetricsDownlinkLoad = int(aux.MetricsDownlinkLoad)
dst.MetricsDownlinkSpeed = int(aux.MetricsDownlinkSpeed)
dst.MetricsMeasurement = int(aux.MetricsMeasurement)
dst.MetricsUplinkLoad = int(aux.MetricsUplinkLoad)
dst.MetricsUplinkSpeed = int(aux.MetricsUplinkSpeed)
dst.NetworkAuthType = int(aux.NetworkAuthType)
dst.NetworkType = int(aux.NetworkType)
dst.TCTimestamp = int(aux.TCTimestamp)
dst.VenueGroup = int(aux.VenueGroup)
dst.VenueType = int(aux.VenueType)
return nil
}
type Hotspot2ConfCapab struct {
Port int `json:"port,omitempty"` // ^(0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])|$
Protocol string `json:"protocol,omitempty"` // icmp|tcp_udp|tcp|udp|esp
Status string `json:"status,omitempty"` // closed|open|unknown
}
func (dst *Hotspot2ConfCapab) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfCapab
aux := &struct {
Port emptyStringInt `json:"port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Port = int(aux.Port)
return nil
}
type Hotspot2ConfCellularNetworkList struct {
Mcc int `json:"mcc,omitempty"`
Mnc int `json:"mnc,omitempty"`
Name string `json:"name,omitempty"` // .{1,128}
}
func (dst *Hotspot2ConfCellularNetworkList) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfCellularNetworkList
aux := &struct {
Mcc emptyStringInt `json:"mcc"`
Mnc emptyStringInt `json:"mnc"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Mcc = int(aux.Mcc)
dst.Mnc = int(aux.Mnc)
return nil
}
type Hotspot2ConfDescription struct {
Language string `json:"language,omitempty"` // [a-z]{3}
Text string `json:"text,omitempty"` // .{1,128}
}
func (dst *Hotspot2ConfDescription) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfDescription
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type Hotspot2ConfFriendlyName struct {
Language string `json:"language,omitempty"` // [a-z]{3}
Text string `json:"text,omitempty"` // .{1,128}
}
func (dst *Hotspot2ConfFriendlyName) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfFriendlyName
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type Hotspot2ConfIcon struct {
Name string `json:"name,omitempty"` // .{1,128}
}
func (dst *Hotspot2ConfIcon) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfIcon
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type Hotspot2ConfIcons struct {
Data string `json:"data,omitempty"`
Filename string `json:"filename,omitempty"` // .{1,256}
@@ -112,6 +251,29 @@ type Hotspot2ConfIcons struct {
Width int `json:"width,omitempty"`
}
func (dst *Hotspot2ConfIcons) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfIcons
aux := &struct {
Height emptyStringInt `json:"height"`
Size emptyStringInt `json:"size"`
Width emptyStringInt `json:"width"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Height = int(aux.Height)
dst.Size = int(aux.Size)
dst.Width = int(aux.Width)
return nil
}
type Hotspot2ConfNaiRealmList struct {
AuthIDs string `json:"auth_ids,omitempty"`
AuthVals string `json:"auth_vals,omitempty"`
@@ -121,6 +283,27 @@ type Hotspot2ConfNaiRealmList struct {
Status bool `json:"status"`
}
func (dst *Hotspot2ConfNaiRealmList) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfNaiRealmList
aux := &struct {
EapMethod emptyStringInt `json:"eap_method"`
Encoding emptyStringInt `json:"encoding"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.EapMethod = int(aux.EapMethod)
dst.Encoding = int(aux.Encoding)
return nil
}
type Hotspot2ConfOsu struct {
Description []Hotspot2ConfDescription `json:"description,omitempty"`
FriendlyName []Hotspot2ConfFriendlyName `json:"friendly_name,omitempty"`
@@ -133,27 +316,117 @@ type Hotspot2ConfOsu struct {
ServerUri string `json:"server_uri,omitempty"`
}
func (dst *Hotspot2ConfOsu) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfOsu
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type Hotspot2ConfQOSMapDcsp struct {
High int `json:"high,omitempty"`
Low int `json:"low,omitempty"`
}
func (dst *Hotspot2ConfQOSMapDcsp) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfQOSMapDcsp
aux := &struct {
High emptyStringInt `json:"high"`
Low emptyStringInt `json:"low"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.High = int(aux.High)
dst.Low = int(aux.Low)
return nil
}
type Hotspot2ConfQOSMapExceptions struct {
Dcsp int `json:"dcsp,omitempty"`
Up int `json:"up,omitempty"` // [0-7]
}
func (dst *Hotspot2ConfQOSMapExceptions) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfQOSMapExceptions
aux := &struct {
Dcsp emptyStringInt `json:"dcsp"`
Up emptyStringInt `json:"up"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Dcsp = int(aux.Dcsp)
dst.Up = int(aux.Up)
return nil
}
type Hotspot2ConfRoamingConsortiumList struct {
Name string `json:"name,omitempty"` // .{1,128}
Oid string `json:"oid,omitempty"` // .{1,128}
}
func (dst *Hotspot2ConfRoamingConsortiumList) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfRoamingConsortiumList
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type Hotspot2ConfVenueName struct {
Language string `json:"language,omitempty"` // [a-z]{3}
Name string `json:"name,omitempty"`
Url string `json:"url,omitempty"`
}
func (dst *Hotspot2ConfVenueName) UnmarshalJSON(b []byte) error {
type Alias Hotspot2ConfVenueName
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listHotspot2Conf(ctx context.Context, site string) ([]Hotspot2Conf, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type HotspotOp struct {
@@ -28,6 +30,22 @@ type HotspotOp struct {
XPassword string `json:"x_password,omitempty"` // .{1,256}
}
func (dst *HotspotOp) UnmarshalJSON(b []byte) error {
type Alias HotspotOp
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listHotspotOp(ctx context.Context, site string) ([]HotspotOp, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type HotspotPackage struct {
@@ -54,6 +56,35 @@ type HotspotPackage struct {
TrialReset float64 `json:"trial_reset,omitempty"`
}
func (dst *HotspotPackage) UnmarshalJSON(b []byte) error {
type Alias HotspotPackage
aux := &struct {
Hours emptyStringInt `json:"hours"`
Index emptyStringInt `json:"index"`
LimitDown emptyStringInt `json:"limit_down"`
LimitQuota emptyStringInt `json:"limit_quota"`
LimitUp emptyStringInt `json:"limit_up"`
TrialDurationMinutes emptyStringInt `json:"trial_duration_minutes"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Hours = int(aux.Hours)
dst.Index = int(aux.Index)
dst.LimitDown = int(aux.LimitDown)
dst.LimitQuota = int(aux.LimitQuota)
dst.LimitUp = int(aux.LimitUp)
dst.TrialDurationMinutes = int(aux.TrialDurationMinutes)
return nil
}
func (c *Client) listHotspotPackage(ctx context.Context, site string) ([]HotspotPackage, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Map struct {
@@ -38,6 +40,27 @@ type Map struct {
Zoom int `json:"zoom,omitempty"`
}
func (dst *Map) UnmarshalJSON(b []byte) error {
type Alias Map
aux := &struct {
Tilt emptyStringInt `json:"tilt"`
Zoom emptyStringInt `json:"zoom"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Tilt = int(aux.Tilt)
dst.Zoom = int(aux.Zoom)
return nil
}
func (c *Client) listMap(ctx context.Context, site string) ([]Map, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type MediaFile struct {
@@ -26,6 +28,22 @@ type MediaFile struct {
Name string `json:"name,omitempty"`
}
func (dst *MediaFile) UnmarshalJSON(b []byte) error {
type Alias MediaFile
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listMediaFile(ctx context.Context, site string) ([]MediaFile, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Network struct {
@@ -166,16 +168,116 @@ type Network struct {
XWANPassword string `json:"x_wan_password,omitempty"` // [^"' ]+
}
func (dst *Network) UnmarshalJSON(b []byte) error {
type Alias Network
aux := &struct {
DHCPDLeaseTime emptyStringInt `json:"dhcpd_leasetime"`
DHCPDTimeOffset emptyStringInt `json:"dhcpd_time_offset"`
DHCPDV6LeaseTime emptyStringInt `json:"dhcpdv6_leasetime"`
IGMPGroupmembership emptyStringInt `json:"igmp_groupmembership"`
IGMPMaxresponse emptyStringInt `json:"igmp_maxresponse"`
IGMPMcrtrexpiretime emptyStringInt `json:"igmp_mcrtrexpiretime"`
IPSecDhGroup emptyStringInt `json:"ipsec_dh_group"`
IPSecEspDhGroup emptyStringInt `json:"ipsec_esp_dh_group"`
IPSecIkeDhGroup emptyStringInt `json:"ipsec_ike_dh_group"`
IPV6RaPreferredLifetime emptyStringInt `json:"ipv6_ra_preferred_lifetime"`
IPV6RaValidLifetime emptyStringInt `json:"ipv6_ra_valid_lifetime"`
OpenVPNLocalPort emptyStringInt `json:"openvpn_local_port"`
OpenVPNRemotePort emptyStringInt `json:"openvpn_remote_port"`
PptpcRouteDistance emptyStringInt `json:"pptpc_route_distance"`
Priority emptyStringInt `json:"priority"`
RouteDistance emptyStringInt `json:"route_distance"`
VLAN emptyStringInt `json:"vlan"`
WANDHCPv6PDSize emptyStringInt `json:"wan_dhcpv6_pd_size"`
WANEgressQOS emptyStringInt `json:"wan_egress_qos"`
WANLoadBalanceWeight emptyStringInt `json:"wan_load_balance_weight"`
WANPrefixlen emptyStringInt `json:"wan_prefixlen"`
WANSmartqDownRate emptyStringInt `json:"wan_smartq_down_rate"`
WANSmartqUpRate emptyStringInt `json:"wan_smartq_up_rate"`
WANVLAN emptyStringInt `json:"wan_vlan"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.DHCPDLeaseTime = int(aux.DHCPDLeaseTime)
dst.DHCPDTimeOffset = int(aux.DHCPDTimeOffset)
dst.DHCPDV6LeaseTime = int(aux.DHCPDV6LeaseTime)
dst.IGMPGroupmembership = int(aux.IGMPGroupmembership)
dst.IGMPMaxresponse = int(aux.IGMPMaxresponse)
dst.IGMPMcrtrexpiretime = int(aux.IGMPMcrtrexpiretime)
dst.IPSecDhGroup = int(aux.IPSecDhGroup)
dst.IPSecEspDhGroup = int(aux.IPSecEspDhGroup)
dst.IPSecIkeDhGroup = int(aux.IPSecIkeDhGroup)
dst.IPV6RaPreferredLifetime = int(aux.IPV6RaPreferredLifetime)
dst.IPV6RaValidLifetime = int(aux.IPV6RaValidLifetime)
dst.OpenVPNLocalPort = int(aux.OpenVPNLocalPort)
dst.OpenVPNRemotePort = int(aux.OpenVPNRemotePort)
dst.PptpcRouteDistance = int(aux.PptpcRouteDistance)
dst.Priority = int(aux.Priority)
dst.RouteDistance = int(aux.RouteDistance)
dst.VLAN = int(aux.VLAN)
dst.WANDHCPv6PDSize = int(aux.WANDHCPv6PDSize)
dst.WANEgressQOS = int(aux.WANEgressQOS)
dst.WANLoadBalanceWeight = int(aux.WANLoadBalanceWeight)
dst.WANPrefixlen = int(aux.WANPrefixlen)
dst.WANSmartqDownRate = int(aux.WANSmartqDownRate)
dst.WANSmartqUpRate = int(aux.WANSmartqUpRate)
dst.WANVLAN = int(aux.WANVLAN)
return nil
}
type NetworkNATOutboundIPAddresses struct {
IPAddress string `json:"ip_address"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^$
WANNetworkGroup string `json:"wan_network_group,omitempty"` // WAN|WAN2
}
func (dst *NetworkNATOutboundIPAddresses) UnmarshalJSON(b []byte) error {
type Alias NetworkNATOutboundIPAddresses
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type NetworkWANDHCPOptions struct {
OptionNumber int `json:"optionNumber,omitempty"` // ([1-9]|[1-8][0-9]|9[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])
Value string `json:"value,omitempty"`
}
func (dst *NetworkWANDHCPOptions) UnmarshalJSON(b []byte) error {
type Alias NetworkWANDHCPOptions
aux := &struct {
OptionNumber emptyStringInt `json:"optionNumber"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.OptionNumber = int(aux.OptionNumber)
return nil
}
func (c *Client) listNetwork(ctx context.Context, site string) ([]Network, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -2,34 +2,9 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
func (dst *Network) UnmarshalJSON(b []byte) error {
type Alias Network
aux := &struct {
VLAN emptyStringInt `json:"vlan"`
DHCPDLeaseTime emptyStringInt `json:"dhcpd_leasetime"`
WANEgressQOS emptyStringInt `json:"wan_egress_qos"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.VLAN = int(aux.VLAN)
dst.DHCPDLeaseTime = int(aux.DHCPDLeaseTime)
dst.WANEgressQOS = int(aux.WANEgressQOS)
return nil
}
func (c *Client) DeleteNetwork(ctx context.Context, site, id, name string) error {
err := c.do(ctx, "DELETE", fmt.Sprintf("s/%s/rest/networkconf/%s", site, id), struct {
Name string `json:"name"`

View File

@@ -51,6 +51,19 @@ func TestNetworkUnmarshalJSON(t *testing.T) {
expected: unifi.Network{WANEgressQOS: 0},
json: `{ "wan_egress_qos": "" }`,
},
"int wan_vlan": {
expected: unifi.Network{WANVLAN: 1},
json: `{ "wan_vlan": 1 }`,
},
"string wan_vlan": {
expected: unifi.Network{WANVLAN: 1},
json: `{ "wan_vlan": "1" }`,
},
"empty wan_vlan vlan": {
expected: unifi.Network{WANVLAN: 0},
json: `{ "wan_vlan": "" }`,
},
} {
t.Run(n, func(t *testing.T) {
var actual unifi.Network

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type PortForward struct {
@@ -35,6 +37,22 @@ type PortForward struct {
Src string `json:"src,omitempty"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])-(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/([0-9]|[1-2][0-9]|3[0-2])$|^!(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^!(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])-(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^!(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/([0-9]|[1-2][0-9]|3[0-2])$|^any$
}
func (dst *PortForward) UnmarshalJSON(b []byte) error {
type Alias PortForward
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listPortForward(ctx context.Context, site string) ([]PortForward, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type PortProfile struct {
@@ -59,6 +61,49 @@ type PortProfile struct {
VoiceNetworkID string `json:"voice_networkconf_id"`
}
func (dst *PortProfile) UnmarshalJSON(b []byte) error {
type Alias PortProfile
aux := &struct {
Dot1XIDleTimeout emptyStringInt `json:"dot1x_idle_timeout"`
EgressRateLimitKbps emptyStringInt `json:"egress_rate_limit_kbps"`
PriorityQueue1Level emptyStringInt `json:"priority_queue1_level"`
PriorityQueue2Level emptyStringInt `json:"priority_queue2_level"`
PriorityQueue3Level emptyStringInt `json:"priority_queue3_level"`
PriorityQueue4Level emptyStringInt `json:"priority_queue4_level"`
Speed emptyStringInt `json:"speed"`
StormctrlBroadcastastLevel emptyStringInt `json:"stormctrl_bcast_level"`
StormctrlBroadcastastRate emptyStringInt `json:"stormctrl_bcast_rate"`
StormctrlMcastLevel emptyStringInt `json:"stormctrl_mcast_level"`
StormctrlMcastRate emptyStringInt `json:"stormctrl_mcast_rate"`
StormctrlUcastLevel emptyStringInt `json:"stormctrl_ucast_level"`
StormctrlUcastRate emptyStringInt `json:"stormctrl_ucast_rate"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Dot1XIDleTimeout = int(aux.Dot1XIDleTimeout)
dst.EgressRateLimitKbps = int(aux.EgressRateLimitKbps)
dst.PriorityQueue1Level = int(aux.PriorityQueue1Level)
dst.PriorityQueue2Level = int(aux.PriorityQueue2Level)
dst.PriorityQueue3Level = int(aux.PriorityQueue3Level)
dst.PriorityQueue4Level = int(aux.PriorityQueue4Level)
dst.Speed = int(aux.Speed)
dst.StormctrlBroadcastastLevel = int(aux.StormctrlBroadcastastLevel)
dst.StormctrlBroadcastastRate = int(aux.StormctrlBroadcastastRate)
dst.StormctrlMcastLevel = int(aux.StormctrlMcastLevel)
dst.StormctrlMcastRate = int(aux.StormctrlMcastRate)
dst.StormctrlUcastLevel = int(aux.StormctrlUcastLevel)
dst.StormctrlUcastRate = int(aux.StormctrlUcastRate)
return nil
}
func (c *Client) listPortProfile(ctx context.Context, site string) ([]PortProfile, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type RADIUSProfile struct {
@@ -35,18 +37,75 @@ type RADIUSProfile struct {
VLANWLANMode string `json:"vlan_wlan_mode,omitempty"` // disabled|optional|required
}
func (dst *RADIUSProfile) UnmarshalJSON(b []byte) error {
type Alias RADIUSProfile
aux := &struct {
InterimUpdateInterval emptyStringInt `json:"interim_update_interval"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.InterimUpdateInterval = int(aux.InterimUpdateInterval)
return nil
}
type RADIUSProfileAcctServers struct {
IP string `json:"ip,omitempty"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
Port int `json:"port,omitempty"` // ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|[6][0-4][0-9]{3}|[6][5][0-4][0-9]{2}|[6][5][5][0-2][0-9]|[6][5][5][3][0-5])$|^$
XSecret string `json:"x_secret,omitempty"`
}
func (dst *RADIUSProfileAcctServers) UnmarshalJSON(b []byte) error {
type Alias RADIUSProfileAcctServers
aux := &struct {
Port emptyStringInt `json:"port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Port = int(aux.Port)
return nil
}
type RADIUSProfileAuthServers struct {
IP string `json:"ip,omitempty"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
Port int `json:"port,omitempty"` // ^([1-9][0-9]{0,3}|[1-5][0-9]{4}|[6][0-4][0-9]{3}|[6][5][0-4][0-9]{2}|[6][5][5][0-2][0-9]|[6][5][5][3][0-5])$|^$
XSecret string `json:"x_secret,omitempty"`
}
func (dst *RADIUSProfileAuthServers) UnmarshalJSON(b []byte) error {
type Alias RADIUSProfileAuthServers
aux := &struct {
Port emptyStringInt `json:"port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Port = int(aux.Port)
return nil
}
func (c *Client) listRADIUSProfile(ctx context.Context, site string) ([]RADIUSProfile, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Routing struct {
@@ -33,6 +35,25 @@ type Routing struct {
Type string `json:"type,omitempty"` // static-route
}
func (dst *Routing) UnmarshalJSON(b []byte) error {
type Alias Routing
aux := &struct {
StaticRouteDistance emptyStringInt `json:"static-route_distance"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.StaticRouteDistance = int(aux.StaticRouteDistance)
return nil
}
func (c *Client) listRouting(ctx context.Context, site string) ([]Routing, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type ScheduleTask struct {
@@ -35,10 +37,42 @@ type ScheduleTask struct {
UpgradeTargets []ScheduleTaskUpgradeTargets `json:"upgrade_targets,omitempty"`
}
func (dst *ScheduleTask) UnmarshalJSON(b []byte) error {
type Alias ScheduleTask
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type ScheduleTaskUpgradeTargets struct {
MAC string `json:"mac,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$
}
func (dst *ScheduleTaskUpgradeTargets) UnmarshalJSON(b []byte) error {
type Alias ScheduleTaskUpgradeTargets
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listScheduleTask(ctx context.Context, site string) ([]ScheduleTask, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingAutoSpeedtest struct {
@@ -29,6 +31,25 @@ type SettingAutoSpeedtest struct {
Interval int `json:"interval,omitempty"` // ^(1[2-9]|[2-9][0-9]|[1-9][0-9]{2,3})$
}
func (dst *SettingAutoSpeedtest) UnmarshalJSON(b []byte) error {
type Alias SettingAutoSpeedtest
aux := &struct {
Interval emptyStringInt `json:"interval"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Interval = int(aux.Interval)
return nil
}
func (c *Client) getSettingAutoSpeedtest(ctx context.Context, site string) (*SettingAutoSpeedtest, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingBaresip struct {
@@ -31,6 +33,22 @@ type SettingBaresip struct {
Server string `json:"server,omitempty"`
}
func (dst *SettingBaresip) UnmarshalJSON(b []byte) error {
type Alias SettingBaresip
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingBaresip(ctx context.Context, site string) (*SettingBaresip, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingBroadcast struct {
@@ -33,6 +35,22 @@ type SettingBroadcast struct {
SoundBeforeType string `json:"sound_before_type,omitempty"` // sample|media
}
func (dst *SettingBroadcast) UnmarshalJSON(b []byte) error {
type Alias SettingBroadcast
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingBroadcast(ctx context.Context, site string) (*SettingBroadcast, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingConnectivity struct {
@@ -33,6 +35,22 @@ type SettingConnectivity struct {
XMeshPsk string `json:"x_mesh_psk,omitempty"`
}
func (dst *SettingConnectivity) UnmarshalJSON(b []byte) error {
type Alias SettingConnectivity
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingConnectivity(ctx context.Context, site string) (*SettingConnectivity, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingCountry struct {
@@ -28,6 +30,25 @@ type SettingCountry struct {
Code int `json:"code,omitempty"`
}
func (dst *SettingCountry) UnmarshalJSON(b []byte) error {
type Alias SettingCountry
aux := &struct {
Code emptyStringInt `json:"code"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Code = int(aux.Code)
return nil
}
func (c *Client) getSettingCountry(ctx context.Context, site string) (*SettingCountry, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingDpi struct {
@@ -29,6 +31,22 @@ type SettingDpi struct {
FingerprintingEnabled bool `json:"fingerprintingEnabled"`
}
func (dst *SettingDpi) UnmarshalJSON(b []byte) error {
type Alias SettingDpi
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingDpi(ctx context.Context, site string) (*SettingDpi, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingElementAdopt struct {
@@ -30,6 +32,22 @@ type SettingElementAdopt struct {
XElementPsk string `json:"x_element_psk,omitempty"`
}
func (dst *SettingElementAdopt) UnmarshalJSON(b []byte) error {
type Alias SettingElementAdopt
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingElementAdopt(ctx context.Context, site string) (*SettingElementAdopt, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingGuestAccess struct {
@@ -116,6 +118,31 @@ type SettingGuestAccess struct {
XWechatSecretKey string `json:"x_wechat_secret_key,omitempty"`
}
func (dst *SettingGuestAccess) UnmarshalJSON(b []byte) error {
type Alias SettingGuestAccess
aux := &struct {
ExpireNumber emptyStringInt `json:"expire_number"`
ExpireUnit emptyStringInt `json:"expire_unit"`
PortalCustomizedBoxOpacity emptyStringInt `json:"portal_customized_box_opacity"`
RADIUSDisconnectPort emptyStringInt `json:"radius_disconnect_port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.ExpireNumber = int(aux.ExpireNumber)
dst.ExpireUnit = int(aux.ExpireUnit)
dst.PortalCustomizedBoxOpacity = int(aux.PortalCustomizedBoxOpacity)
dst.RADIUSDisconnectPort = int(aux.RADIUSDisconnectPort)
return nil
}
func (c *Client) getSettingGuestAccess(ctx context.Context, site string) (*SettingGuestAccess, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingIps struct {
@@ -38,6 +40,22 @@ type SettingIps struct {
Suppression SettingIpsSuppression `json:"suppression,omitempty"`
}
func (dst *SettingIps) UnmarshalJSON(b []byte) error {
type Alias SettingIps
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SettingIpsAlerts struct {
Category string `json:"category,omitempty"`
Gid int `json:"gid,omitempty"`
@@ -47,6 +65,27 @@ type SettingIpsAlerts struct {
Type string `json:"type,omitempty"` // all|track
}
func (dst *SettingIpsAlerts) UnmarshalJSON(b []byte) error {
type Alias SettingIpsAlerts
aux := &struct {
Gid emptyStringInt `json:"gid"`
ID emptyStringInt `json:"id"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Gid = int(aux.Gid)
dst.ID = int(aux.ID)
return nil
}
type SettingIpsDNSFilters struct {
AllowedSites []string `json:"allowed_sites,omitempty"` // ^[a-zA-Z0-9.-]+$|^$
BlockedSites []string `json:"blocked_sites,omitempty"` // ^[a-zA-Z0-9.-]+$|^$
@@ -58,29 +97,109 @@ type SettingIpsDNSFilters struct {
Version string `json:"version,omitempty"` // v4|v6
}
func (dst *SettingIpsDNSFilters) UnmarshalJSON(b []byte) error {
type Alias SettingIpsDNSFilters
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SettingIpsHoneypot struct {
IPAddress string `json:"ip_address,omitempty"`
NetworkID string `json:"network_id"`
Version string `json:"version,omitempty"` // v4|v6
}
func (dst *SettingIpsHoneypot) UnmarshalJSON(b []byte) error {
type Alias SettingIpsHoneypot
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SettingIpsSuppression struct {
Alerts []SettingIpsAlerts `json:"alerts,omitempty"`
Whitelist []SettingIpsWhitelist `json:"whitelist,omitempty"`
}
func (dst *SettingIpsSuppression) UnmarshalJSON(b []byte) error {
type Alias SettingIpsSuppression
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SettingIpsTracking struct {
Direction string `json:"direction,omitempty"` // both|src|dest
Mode string `json:"mode,omitempty"` // ip|subnet|network
Value string `json:"value,omitempty"`
}
func (dst *SettingIpsTracking) UnmarshalJSON(b []byte) error {
type Alias SettingIpsTracking
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SettingIpsWhitelist struct {
Direction string `json:"direction,omitempty"` // both|src|dest
Mode string `json:"mode,omitempty"` // ip|subnet|network
Value string `json:"value,omitempty"`
}
func (dst *SettingIpsWhitelist) UnmarshalJSON(b []byte) error {
type Alias SettingIpsWhitelist
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingIps(ctx context.Context, site string) (*SettingIps, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingLcm struct {
@@ -32,6 +34,27 @@ type SettingLcm struct {
TouchEvent bool `json:"touch_event"`
}
func (dst *SettingLcm) UnmarshalJSON(b []byte) error {
type Alias SettingLcm
aux := &struct {
Brightness emptyStringInt `json:"brightness"`
IDleTimeout emptyStringInt `json:"idle_timeout"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Brightness = int(aux.Brightness)
dst.IDleTimeout = int(aux.IDleTimeout)
return nil
}
func (c *Client) getSettingLcm(ctx context.Context, site string) (*SettingLcm, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingLocale struct {
@@ -28,6 +30,22 @@ type SettingLocale struct {
Timezone string `json:"timezone,omitempty"`
}
func (dst *SettingLocale) UnmarshalJSON(b []byte) error {
type Alias SettingLocale
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingLocale(ctx context.Context, site string) (*SettingLocale, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingMgmt struct {
@@ -44,6 +46,22 @@ type SettingMgmt struct {
XSshUsername string `json:"x_ssh_username,omitempty"` // ^[_A-Za-z0-9][-_.A-Za-z0-9]{0,29}$
}
func (dst *SettingMgmt) UnmarshalJSON(b []byte) error {
type Alias SettingMgmt
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingMgmt(ctx context.Context, site string) (*SettingMgmt, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingNetworkOptimization struct {
@@ -28,6 +30,22 @@ type SettingNetworkOptimization struct {
Enabled bool `json:"enabled"`
}
func (dst *SettingNetworkOptimization) UnmarshalJSON(b []byte) error {
type Alias SettingNetworkOptimization
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingNetworkOptimization(ctx context.Context, site string) (*SettingNetworkOptimization, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingNtp struct {
@@ -31,6 +33,22 @@ type SettingNtp struct {
NtpServer4 string `json:"ntp_server_4,omitempty"`
}
func (dst *SettingNtp) UnmarshalJSON(b []byte) error {
type Alias SettingNtp
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingNtp(ctx context.Context, site string) (*SettingNtp, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingPorta struct {
@@ -28,6 +30,22 @@ type SettingPorta struct {
Ugw3WAN2Enabled bool `json:"ugw3_wan2_enabled"`
}
func (dst *SettingPorta) UnmarshalJSON(b []byte) error {
type Alias SettingPorta
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingPorta(ctx context.Context, site string) (*SettingPorta, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingProviderCapabilities struct {
@@ -30,6 +32,27 @@ type SettingProviderCapabilities struct {
Upload int `json:"upload,omitempty"` // ^[1-9][0-9]*$
}
func (dst *SettingProviderCapabilities) UnmarshalJSON(b []byte) error {
type Alias SettingProviderCapabilities
aux := &struct {
Download emptyStringInt `json:"download"`
Upload emptyStringInt `json:"upload"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Download = int(aux.Download)
dst.Upload = int(aux.Upload)
return nil
}
func (c *Client) getSettingProviderCapabilities(ctx context.Context, site string) (*SettingProviderCapabilities, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingRadioAi struct {
@@ -38,6 +40,43 @@ type SettingRadioAi struct {
UseXY bool `json:"useXY"`
}
func (dst *SettingRadioAi) UnmarshalJSON(b []byte) error {
type Alias SettingRadioAi
aux := &struct {
ChannelsNa []emptyStringInt `json:"channels_na"`
ChannelsNg []emptyStringInt `json:"channels_ng"`
HtModesNa []emptyStringInt `json:"ht_modes_na"`
HtModesNg []emptyStringInt `json:"ht_modes_ng"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.ChannelsNa = make([]int, len(aux.ChannelsNa))
for i, v := range aux.ChannelsNa {
dst.ChannelsNa[i] = int(v)
}
dst.ChannelsNg = make([]int, len(aux.ChannelsNg))
for i, v := range aux.ChannelsNg {
dst.ChannelsNg[i] = int(v)
}
dst.HtModesNa = make([]int, len(aux.HtModesNa))
for i, v := range aux.HtModesNa {
dst.HtModesNa[i] = int(v)
}
dst.HtModesNg = make([]int, len(aux.HtModesNg))
for i, v := range aux.HtModesNg {
dst.HtModesNg[i] = int(v)
}
return nil
}
func (c *Client) getSettingRadioAi(ctx context.Context, site string) (*SettingRadioAi, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingRadius struct {
@@ -35,6 +37,29 @@ type SettingRadius struct {
XSecret string `json:"x_secret,omitempty"` // [^\"\' ]{1,48}
}
func (dst *SettingRadius) UnmarshalJSON(b []byte) error {
type Alias SettingRadius
aux := &struct {
AcctPort emptyStringInt `json:"acct_port"`
AuthPort emptyStringInt `json:"auth_port"`
InterimUpdateInterval emptyStringInt `json:"interim_update_interval"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.AcctPort = int(aux.AcctPort)
dst.AuthPort = int(aux.AuthPort)
dst.InterimUpdateInterval = int(aux.InterimUpdateInterval)
return nil
}
func (c *Client) getSettingRadius(ctx context.Context, site string) (*SettingRadius, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingRsyslogd struct {
@@ -36,6 +38,27 @@ type SettingRsyslogd struct {
ThisControllerEncryptedOnly bool `json:"this_controller_encrypted_only"`
}
func (dst *SettingRsyslogd) UnmarshalJSON(b []byte) error {
type Alias SettingRsyslogd
aux := &struct {
NetconsolePort emptyStringInt `json:"netconsole_port"`
Port emptyStringInt `json:"port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.NetconsolePort = int(aux.NetconsolePort)
dst.Port = int(aux.Port)
return nil
}
func (c *Client) getSettingRsyslogd(ctx context.Context, site string) (*SettingRsyslogd, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSnmp struct {
@@ -32,6 +34,22 @@ type SettingSnmp struct {
XPassword string `json:"x_password,omitempty"` // [^'"]{8,32}
}
func (dst *SettingSnmp) UnmarshalJSON(b []byte) error {
type Alias SettingSnmp
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSnmp(ctx context.Context, site string) (*SettingSnmp, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperCloudaccess struct {
@@ -34,6 +36,22 @@ type SettingSuperCloudaccess struct {
XPrivateKey string `json:"x_private_key,omitempty"`
}
func (dst *SettingSuperCloudaccess) UnmarshalJSON(b []byte) error {
type Alias SettingSuperCloudaccess
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperCloudaccess(ctx context.Context, site string) (*SettingSuperCloudaccess, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperEvents struct {
@@ -28,6 +30,22 @@ type SettingSuperEvents struct {
Ignored string `json:"_ignored,omitempty"`
}
func (dst *SettingSuperEvents) UnmarshalJSON(b []byte) error {
type Alias SettingSuperEvents
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperEvents(ctx context.Context, site string) (*SettingSuperEvents, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperFwupdate struct {
@@ -30,6 +32,22 @@ type SettingSuperFwupdate struct {
SsoEnabled bool `json:"sso_enabled"`
}
func (dst *SettingSuperFwupdate) UnmarshalJSON(b []byte) error {
type Alias SettingSuperFwupdate
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperFwupdate(ctx context.Context, site string) (*SettingSuperFwupdate, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperIdentity struct {
@@ -29,6 +31,22 @@ type SettingSuperIdentity struct {
Name string `json:"name,omitempty"`
}
func (dst *SettingSuperIdentity) UnmarshalJSON(b []byte) error {
type Alias SettingSuperIdentity
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperIdentity(ctx context.Context, site string) (*SettingSuperIdentity, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperMail struct {
@@ -28,6 +30,22 @@ type SettingSuperMail struct {
Provider string `json:"provider,omitempty"` // smtp|cloud|disabled
}
func (dst *SettingSuperMail) UnmarshalJSON(b []byte) error {
type Alias SettingSuperMail
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperMail(ctx context.Context, site string) (*SettingSuperMail, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperMgmt struct {
@@ -50,7 +52,7 @@ type SettingSuperMgmt struct {
ContactInfoState string `json:"contact_info_state,omitempty"`
ContactInfoZip string `json:"contact_info_zip,omitempty"`
DataRetentionTimeEnabled bool `json:"data_retention_time_enabled"`
DataRetentionTimeInHoursFor5minutesScale int `json:"data_retention_time_in_hours_for_5minutes_scale,omitempty"`
DataRetentionTimeInHoursFor5MinutesScale int `json:"data_retention_time_in_hours_for_5minutes_scale,omitempty"`
DataRetentionTimeInHoursForDailyScale int `json:"data_retention_time_in_hours_for_daily_scale,omitempty"`
DataRetentionTimeInHoursForHourlyScale int `json:"data_retention_time_in_hours_for_hourly_scale,omitempty"`
DataRetentionTimeInHoursForMonthlyScale int `json:"data_retention_time_in_hours_for_monthly_scale,omitempty"`
@@ -72,6 +74,41 @@ type SettingSuperMgmt struct {
XSshUsername string `json:"x_ssh_username,omitempty"`
}
func (dst *SettingSuperMgmt) UnmarshalJSON(b []byte) error {
type Alias SettingSuperMgmt
aux := &struct {
AutobackupDays emptyStringInt `json:"autobackup_days"`
AutobackupMaxFiles emptyStringInt `json:"autobackup_max_files"`
DataRetentionTimeInHoursFor5MinutesScale emptyStringInt `json:"data_retention_time_in_hours_for_5minutes_scale"`
DataRetentionTimeInHoursForDailyScale emptyStringInt `json:"data_retention_time_in_hours_for_daily_scale"`
DataRetentionTimeInHoursForHourlyScale emptyStringInt `json:"data_retention_time_in_hours_for_hourly_scale"`
DataRetentionTimeInHoursForMonthlyScale emptyStringInt `json:"data_retention_time_in_hours_for_monthly_scale"`
DataRetentionTimeInHoursForOthers emptyStringInt `json:"data_retention_time_in_hours_for_others"`
MinimumUsableHdSpace emptyStringInt `json:"minimum_usable_hd_space"`
MinimumUsableSdSpace emptyStringInt `json:"minimum_usable_sd_space"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.AutobackupDays = int(aux.AutobackupDays)
dst.AutobackupMaxFiles = int(aux.AutobackupMaxFiles)
dst.DataRetentionTimeInHoursFor5MinutesScale = int(aux.DataRetentionTimeInHoursFor5MinutesScale)
dst.DataRetentionTimeInHoursForDailyScale = int(aux.DataRetentionTimeInHoursForDailyScale)
dst.DataRetentionTimeInHoursForHourlyScale = int(aux.DataRetentionTimeInHoursForHourlyScale)
dst.DataRetentionTimeInHoursForMonthlyScale = int(aux.DataRetentionTimeInHoursForMonthlyScale)
dst.DataRetentionTimeInHoursForOthers = int(aux.DataRetentionTimeInHoursForOthers)
dst.MinimumUsableHdSpace = int(aux.MinimumUsableHdSpace)
dst.MinimumUsableSdSpace = int(aux.MinimumUsableSdSpace)
return nil
}
func (c *Client) getSettingSuperMgmt(ctx context.Context, site string) (*SettingSuperMgmt, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperSdn struct {
@@ -37,6 +39,22 @@ type SettingSuperSdn struct {
XOauthAppSecret string `json:"x_oauth_app_secret,omitempty"`
}
func (dst *SettingSuperSdn) UnmarshalJSON(b []byte) error {
type Alias SettingSuperSdn
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingSuperSdn(ctx context.Context, site string) (*SettingSuperSdn, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingSuperSmtp struct {
@@ -36,6 +38,25 @@ type SettingSuperSmtp struct {
XPassword string `json:"x_password,omitempty"`
}
func (dst *SettingSuperSmtp) UnmarshalJSON(b []byte) error {
type Alias SettingSuperSmtp
aux := &struct {
Port emptyStringInt `json:"port"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.Port = int(aux.Port)
return nil
}
func (c *Client) getSettingSuperSmtp(ctx context.Context, site string) (*SettingSuperSmtp, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingUsg struct {
@@ -82,6 +84,57 @@ type SettingUsg struct {
UpnpWANInterface string `json:"upnp_wan_interface,omitempty"` // WAN|WAN2
}
func (dst *SettingUsg) UnmarshalJSON(b []byte) error {
type Alias SettingUsg
aux := &struct {
ArpCacheBaseReachable emptyStringInt `json:"arp_cache_base_reachable"`
DHCPRelayHopCount emptyStringInt `json:"dhcp_relay_hop_count"`
DHCPRelayMaxSize emptyStringInt `json:"dhcp_relay_max_size"`
DHCPRelayPort emptyStringInt `json:"dhcp_relay_port"`
ICMPTimeout emptyStringInt `json:"icmp_timeout"`
MssClampMss emptyStringInt `json:"mss_clamp_mss"`
OtherTimeout emptyStringInt `json:"other_timeout"`
TCPCloseTimeout emptyStringInt `json:"tcp_close_timeout"`
TCPCloseWaitTimeout emptyStringInt `json:"tcp_close_wait_timeout"`
TCPEstablishedTimeout emptyStringInt `json:"tcp_established_timeout"`
TCPFinWaitTimeout emptyStringInt `json:"tcp_fin_wait_timeout"`
TCPLastAckTimeout emptyStringInt `json:"tcp_last_ack_timeout"`
TCPSynRecvTimeout emptyStringInt `json:"tcp_syn_recv_timeout"`
TCPSynSentTimeout emptyStringInt `json:"tcp_syn_sent_timeout"`
TCPTimeWaitTimeout emptyStringInt `json:"tcp_time_wait_timeout"`
UDPOtherTimeout emptyStringInt `json:"udp_other_timeout"`
UDPStreamTimeout emptyStringInt `json:"udp_stream_timeout"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.ArpCacheBaseReachable = int(aux.ArpCacheBaseReachable)
dst.DHCPRelayHopCount = int(aux.DHCPRelayHopCount)
dst.DHCPRelayMaxSize = int(aux.DHCPRelayMaxSize)
dst.DHCPRelayPort = int(aux.DHCPRelayPort)
dst.ICMPTimeout = int(aux.ICMPTimeout)
dst.MssClampMss = int(aux.MssClampMss)
dst.OtherTimeout = int(aux.OtherTimeout)
dst.TCPCloseTimeout = int(aux.TCPCloseTimeout)
dst.TCPCloseWaitTimeout = int(aux.TCPCloseWaitTimeout)
dst.TCPEstablishedTimeout = int(aux.TCPEstablishedTimeout)
dst.TCPFinWaitTimeout = int(aux.TCPFinWaitTimeout)
dst.TCPLastAckTimeout = int(aux.TCPLastAckTimeout)
dst.TCPSynRecvTimeout = int(aux.TCPSynRecvTimeout)
dst.TCPSynSentTimeout = int(aux.TCPSynSentTimeout)
dst.TCPTimeWaitTimeout = int(aux.TCPTimeWaitTimeout)
dst.UDPOtherTimeout = int(aux.UDPOtherTimeout)
dst.UDPStreamTimeout = int(aux.UDPStreamTimeout)
return nil
}
func (c *Client) getSettingUsg(ctx context.Context, site string) (*SettingUsg, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SettingUsw struct {
@@ -28,6 +30,22 @@ type SettingUsw struct {
DHCPSnoop bool `json:"dhcp_snoop"`
}
func (dst *SettingUsw) UnmarshalJSON(b []byte) error {
type Alias SettingUsw
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) getSettingUsw(ctx context.Context, site string) (*SettingUsw, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type SpatialRecord struct {
@@ -27,17 +29,65 @@ type SpatialRecord struct {
Name string `json:"name,omitempty"` // .{1,128}
}
func (dst *SpatialRecord) UnmarshalJSON(b []byte) error {
type Alias SpatialRecord
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SpatialRecordDevices struct {
MAC string `json:"mac,omitempty"` // ^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$
Position SpatialRecordPosition `json:"position,omitempty"`
}
func (dst *SpatialRecordDevices) UnmarshalJSON(b []byte) error {
type Alias SpatialRecordDevices
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
type SpatialRecordPosition struct {
X float64 `json:"x,omitempty"` // (^([-]?[\d]+)$)|(^([-]?[\d]+[.]?[\d]+)$)
Y float64 `json:"y,omitempty"` // (^([-]?[\d]+)$)|(^([-]?[\d]+[.]?[\d]+)$)
Z float64 `json:"z,omitempty"` // (^([-]?[\d]+)$)|(^([-]?[\d]+[.]?[\d]+)$)
}
func (dst *SpatialRecordPosition) UnmarshalJSON(b []byte) error {
type Alias SpatialRecordPosition
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listSpatialRecord(ctx context.Context, site string) ([]SpatialRecord, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type Tag struct {
@@ -27,6 +29,22 @@ type Tag struct {
Name string `json:"name,omitempty"`
}
func (dst *Tag) UnmarshalJSON(b []byte) error {
type Alias Tag
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listTag(ctx context.Context, site string) ([]Tag, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type User struct {
@@ -37,6 +39,25 @@ type User struct {
UserGroupID string `json:"usergroup_id"`
}
func (dst *User) UnmarshalJSON(b []byte) error {
type Alias User
aux := &struct {
LastSeen emptyStringInt `json:"last_seen"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.LastSeen = int(aux.LastSeen)
return nil
}
func (c *Client) listUser(ctx context.Context, site string) ([]User, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type UserGroup struct {
@@ -28,6 +30,27 @@ type UserGroup struct {
QOSRateMaxUp int `json:"qos_rate_max_up,omitempty"` // -1|[2-9]|[1-9][0-9]{1,4}|100000
}
func (dst *UserGroup) UnmarshalJSON(b []byte) error {
type Alias UserGroup
aux := &struct {
QOSRateMaxDown emptyStringInt `json:"qos_rate_max_down"`
QOSRateMaxUp emptyStringInt `json:"qos_rate_max_up"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.QOSRateMaxDown = int(aux.QOSRateMaxDown)
dst.QOSRateMaxUp = int(aux.QOSRateMaxUp)
return nil
}
func (c *Client) listUserGroup(ctx context.Context, site string) ([]UserGroup, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type VirtualDevice struct {
@@ -31,6 +33,22 @@ type VirtualDevice struct {
Y string `json:"y,omitempty"`
}
func (dst *VirtualDevice) UnmarshalJSON(b []byte) error {
type Alias VirtualDevice
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listVirtualDevice(ctx context.Context, site string) ([]VirtualDevice, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type WLAN struct {
@@ -97,6 +99,47 @@ type WLAN struct {
XWEP string `json:"x_wep,omitempty"`
}
func (dst *WLAN) UnmarshalJSON(b []byte) error {
type Alias WLAN
aux := &struct {
DTIMNa emptyStringInt `json:"dtim_na"`
DTIMNg emptyStringInt `json:"dtim_ng"`
GroupRekey emptyStringInt `json:"group_rekey"`
MinrateNaBeaconRateKbps emptyStringInt `json:"minrate_na_beacon_rate_kbps"`
MinrateNaDataRateKbps emptyStringInt `json:"minrate_na_data_rate_kbps"`
MinrateNaMgmtRateKbps emptyStringInt `json:"minrate_na_mgmt_rate_kbps"`
MinrateNgBeaconRateKbps emptyStringInt `json:"minrate_ng_beacon_rate_kbps"`
MinrateNgDataRateKbps emptyStringInt `json:"minrate_ng_data_rate_kbps"`
MinrateNgMgmtRateKbps emptyStringInt `json:"minrate_ng_mgmt_rate_kbps"`
RoamClusterID emptyStringInt `json:"roam_cluster_id"`
VLAN emptyStringInt `json:"vlan"`
WEPIDX emptyStringInt `json:"wep_idx"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.DTIMNa = int(aux.DTIMNa)
dst.DTIMNg = int(aux.DTIMNg)
dst.GroupRekey = int(aux.GroupRekey)
dst.MinrateNaBeaconRateKbps = int(aux.MinrateNaBeaconRateKbps)
dst.MinrateNaDataRateKbps = int(aux.MinrateNaDataRateKbps)
dst.MinrateNaMgmtRateKbps = int(aux.MinrateNaMgmtRateKbps)
dst.MinrateNgBeaconRateKbps = int(aux.MinrateNgBeaconRateKbps)
dst.MinrateNgDataRateKbps = int(aux.MinrateNgDataRateKbps)
dst.MinrateNgMgmtRateKbps = int(aux.MinrateNgMgmtRateKbps)
dst.RoamClusterID = int(aux.RoamClusterID)
dst.VLAN = int(aux.VLAN)
dst.WEPIDX = int(aux.WEPIDX)
return nil
}
type WLANScheduleWithDuration struct {
DurationMinutes int `json:"duration_minutes,omitempty"` // ^[1-9][0-9]*$
StartDaysOfWeek []string `json:"start_days_of_week,omitempty"` // ^(sun|mon|tue|wed|thu|fri|sat)$
@@ -104,6 +147,29 @@ type WLANScheduleWithDuration struct {
StartMinute int `json:"start_minute,omitempty"` // ^[0-5]?[0-9]$
}
func (dst *WLANScheduleWithDuration) UnmarshalJSON(b []byte) error {
type Alias WLANScheduleWithDuration
aux := &struct {
DurationMinutes emptyStringInt `json:"duration_minutes"`
StartHour emptyStringInt `json:"start_hour"`
StartMinute emptyStringInt `json:"start_minute"`
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
dst.DurationMinutes = int(aux.DurationMinutes)
dst.StartHour = int(aux.StartHour)
dst.StartMinute = int(aux.StartMinute)
return nil
}
func (c *Client) listWLAN(ctx context.Context, site string) ([]WLAN, error) {
var respBody struct {
Meta meta `json:"meta"`

View File

@@ -2,28 +2,8 @@ package unifi
import (
"context"
"encoding/json"
)
func (n *WLAN) UnmarshalJSON(b []byte) error {
type Alias WLAN
aux := &struct {
VLAN emptyStringInt `json:"vlan"`
*Alias
}{
Alias: (*Alias)(n),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return err
}
n.VLAN = int(aux.VLAN)
return nil
}
func (c *Client) CreateWLAN(ctx context.Context, site string, d *WLAN) (*WLAN, error) {
if d.Schedule == nil {
d.Schedule = []string{}

View File

@@ -5,13 +5,15 @@ package unifi
import (
"context"
"encoding/json"
"fmt"
)
// just to fix compile issues with the import
var (
_ fmt.Formatter
_ context.Context
_ fmt.Formatter
_ json.Marshaler
)
type WLANGroup struct {
@@ -26,6 +28,22 @@ type WLANGroup struct {
Name string `json:"name,omitempty"` // .{1,128}
}
func (dst *WLANGroup) UnmarshalJSON(b []byte) error {
type Alias WLANGroup
aux := &struct {
*Alias
}{
Alias: (*Alias)(dst),
}
err := json.Unmarshal(b, &aux)
if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err)
}
return nil
}
func (c *Client) listWLANGroup(ctx context.Context, site string) ([]WLANGroup, error) {
var respBody struct {
Meta meta `json:"meta"`