mirror of
https://github.com/ManyakRus/starter.git
synced 2025-11-27 23:18:34 +02:00
сделал Set_FieldFromEnv_String()
This commit is contained in:
@@ -1286,3 +1286,41 @@ func Date_from_TimestampReference(Timestamp *timestamppb.Timestamp) time.Time {
|
||||
|
||||
return Otvet
|
||||
}
|
||||
|
||||
// SetFieldValue - устанавливает значение поля в структуре
|
||||
// Параметры:
|
||||
// Object - ссылка(&) на структуру
|
||||
// FieldName - название поля
|
||||
// Value - значение нужного типа
|
||||
// Возвращает ошибку
|
||||
func SetFieldValue(Object any, FieldName string, Value any) error {
|
||||
var err error
|
||||
|
||||
ref := reflect.ValueOf(Object)
|
||||
|
||||
//sanek
|
||||
if ref.Kind() != reflect.Ptr {
|
||||
err = fmt.Errorf("expected pointer but got %s", ref.Kind().String())
|
||||
return err
|
||||
}
|
||||
|
||||
// if its a pointer, resolve its Value
|
||||
if ref.Kind() == reflect.Ptr {
|
||||
ref = reflect.Indirect(ref)
|
||||
}
|
||||
|
||||
if ref.Kind() == reflect.Interface {
|
||||
ref = ref.Elem()
|
||||
}
|
||||
|
||||
//should double check we now have a struct (could still be anything)
|
||||
if ref.Kind() != reflect.Struct {
|
||||
err = fmt.Errorf("expected struct but got %s", ref.Kind().String())
|
||||
return err
|
||||
}
|
||||
|
||||
prop := ref.FieldByName(FieldName)
|
||||
prop.Set(reflect.ValueOf(Value))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1282,3 +1282,29 @@ func TestDate_from_TimestampReference(t *testing.T) {
|
||||
t.Errorf("Expected time.Time{}, but got %s", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetFieldValue(t *testing.T) {
|
||||
type Struct1 struct {
|
||||
Field1 string
|
||||
}
|
||||
|
||||
Struct := &Struct1{}
|
||||
SetFieldValue(Struct, "Field1", "Test")
|
||||
|
||||
if Struct.Field1 != "Test" {
|
||||
t.Errorf("Expected 'Test', but got %s", Struct.Field1)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetFieldValue2(t *testing.T) {
|
||||
type Struct1 struct {
|
||||
Field1 int
|
||||
}
|
||||
|
||||
Struct := &Struct1{}
|
||||
SetFieldValue(Struct, "Field1", "1")
|
||||
|
||||
if Struct.Field1 != 1 {
|
||||
t.Errorf("Expected 'Test', but got %v", Struct.Field1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
package microl
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/ManyakRus/starter/log"
|
||||
"github.com/ManyakRus/starter/micro"
|
||||
"os"
|
||||
)
|
||||
|
||||
@@ -17,3 +19,19 @@ func Getenv(Name string, IsRequired bool) string {
|
||||
|
||||
return Otvet
|
||||
}
|
||||
|
||||
// Set_FieldFromEnv_String - устанавливает значение поля из переменной окружения
|
||||
// Параметры:
|
||||
// Object - указатель на структуру
|
||||
// FieldName - имя поля
|
||||
func Set_FieldFromEnv_String(StructReference any, FieldName string, IsRequired bool) {
|
||||
Value := Getenv(FieldName, IsRequired)
|
||||
|
||||
err := micro.SetFieldValue(StructReference, FieldName, Value)
|
||||
|
||||
if err != nil {
|
||||
err = fmt.Errorf("SetFieldFrom() FieldName: %s error: %w", FieldName, err)
|
||||
log.Error(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,23 @@
|
||||
package microl
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSet_FieldFromEnv(t *testing.T) {
|
||||
type Struct1 struct {
|
||||
TestSet_FieldFromEnv string
|
||||
}
|
||||
|
||||
Name := "TestSet_FieldFromEnv"
|
||||
os.Setenv(Name, Name)
|
||||
|
||||
Struct := Struct1{}
|
||||
Set_FieldFromEnv_String(&Struct, Name, true)
|
||||
|
||||
if Struct.TestSet_FieldFromEnv != Name {
|
||||
t.Error("Set_FieldFromEnv_String() error")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user