From fc9b29b7f3d7b6a4f37a704f78e0ee31affc738b Mon Sep 17 00:00:00 2001 From: Benjamin VAUDOUR Date: Mon, 4 Mar 2024 09:20:42 +0100 Subject: [PATCH] Corrections diverses : collection, datetime, ini --- collection/slice.go | 2 +- datetime/datetime.go | 6 +++++- ini/ini.go | 40 ++++++++++++++++++++++++---------------- 3 files changed, 30 insertions(+), 18 deletions(-) diff --git a/collection/slice.go b/collection/slice.go index dbe9e3e..fbc5813 100644 --- a/collection/slice.go +++ b/collection/slice.go @@ -113,7 +113,7 @@ func ContainsAll[T comparable, S ~[]T](s S, in ...T) bool { } // Maps retourne un slice à partir d’un autre slice en appliquant une fonction de transformation pour chaque valeur. -func Maps[T1, T2 any, S1 ~[]T1, S2 ~[]T2](in S1, f func(T1) T2) (out S2) { +func Maps[T1, T2 any, S1 ~[]T1, S2 []T2](in S1, f func(T1) T2) (out S2) { out = make(S2, len(in)) for i, e := range in { diff --git a/datetime/datetime.go b/datetime/datetime.go index 60ae892..55528c5 100644 --- a/datetime/datetime.go +++ b/datetime/datetime.go @@ -1,6 +1,7 @@ package datetime import ( + "fmt" "time" ) @@ -178,7 +179,10 @@ func (dt datetime) f(f string, l *time.Location) string { } return formatT(dt.t(l), f) } -func (dt datetime) str(l *time.Location) string { return dt.f("Y-m-d", l) } +func (dt datetime) str(l *time.Location) string { + ft, fc := "y-m-d", formatP[dt.p()] + return dt.f(fmt.Sprintf("%s %s", ft, fc), l) +} // DateTime représente une indication de temps (date + heure). type DateTime struct { diff --git a/ini/ini.go b/ini/ini.go index 672c0ec..84cb3cd 100644 --- a/ini/ini.go +++ b/ini/ini.go @@ -185,19 +185,24 @@ func (c *Setting) Read(r io.Reader) { } // Write écrit la configuration dans le descripteur de sortie. -func (c *Setting) Write(w io.Writer) error { +func (c *Setting) Write(w io.Writer) (out Option[error]) { for k, v := range c.m { l := c.t[c.i[k]] i := strings.Index(l, "=") c.t[c.i[k]] = l[:i+1] + " " + v } + buf := bufio.NewWriter(w) for _, l := range c.t { if _, err := buf.WriteString(l + "\n"); err != nil { - return err + return Some(err) } } - return buf.Flush() + + if err := buf.Flush(); err != nil { + out = Some(err) + } + return } // IniFile représente un fichier de configuration. @@ -219,22 +224,25 @@ func NewFile(template, filepath string) *IniFile { } // Load charge la configuration -func (cf *IniFile) Load() error { - f, err := os.Open(cf.Path) - if err != nil { - return err +func (cf *IniFile) Load() (out Option[error]) { + if f, err := os.Open(cf.Path); err == nil { + defer f.Close() + cf.Setting.Read(f) + } else { + out = Some(err) } - defer f.Close() - cf.Setting.Read(f) - return nil + + return } // Save enregistre la configuration sur le disque. -func (cf *IniFile) Save() error { - f, err := os.Create(cf.Path) - if err != nil { - return err +func (cf *IniFile) Save() (out Option[error]) { + if f, err := os.Create(cf.Path); err == nil { + defer f.Close() + out = cf.Setting.Write(f) + } else { + out = Some(err) } - defer f.Close() - return cf.Setting.Write(f) + + return }