From 29b55485a7a65cf160bab15a36527480f606354f Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Fri, 11 Oct 2024 18:27:31 +0200 Subject: [PATCH] seiralise NanoCPUs as string Signed-off-by: Nicolas De Loof --- types/cpus.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ types/types.go | 25 ------------------------- 2 files changed, 48 insertions(+), 25 deletions(-) create mode 100644 types/cpus.go diff --git a/types/cpus.go b/types/cpus.go new file mode 100644 index 00000000..f32c6e62 --- /dev/null +++ b/types/cpus.go @@ -0,0 +1,48 @@ +/* + Copyright 2020 The Compose Specification Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package types + +import ( + "fmt" + "strconv" +) + +type NanoCPUs float32 + +func (n *NanoCPUs) DecodeMapstructure(a any) error { + switch v := a.(type) { + case string: + f, err := strconv.ParseFloat(v, 64) + if err != nil { + return err + } + *n = NanoCPUs(f) + case int: + *n = NanoCPUs(v) + case float32: + *n = NanoCPUs(v) + case float64: + *n = NanoCPUs(v) + default: + return fmt.Errorf("unexpected value type %T for cpus", v) + } + return nil +} + +func (n *NanoCPUs) Value() float32 { + return float32(*n) +} diff --git a/types/types.go b/types/types.go index d96e206d..732e46db 100644 --- a/types/types.go +++ b/types/types.go @@ -20,7 +20,6 @@ import ( "encoding/json" "fmt" "sort" - "strconv" "strings" "github.com/docker/go-connections/nat" @@ -391,30 +390,6 @@ type Resource struct { Extensions Extensions `yaml:"#extensions,inline,omitempty" json:"-"` } -type NanoCPUs float32 - -func (n *NanoCPUs) DecodeMapstructure(a any) error { - switch v := a.(type) { - case string: - f, err := strconv.ParseFloat(v, 64) - if err != nil { - return err - } - *n = NanoCPUs(f) - case float32: - *n = NanoCPUs(v) - case float64: - *n = NanoCPUs(v) - default: - return fmt.Errorf("unexpected value type %T for cpus", v) - } - return nil -} - -func (n *NanoCPUs) Value() float32 { - return float32(*n) -} - // GenericResource represents a "user defined" resource which can // only be an integer (e.g: SSD=3) for a service type GenericResource struct {