From cac9377b8efb86b7d22ea7f4091438914c0de069 Mon Sep 17 00:00:00 2001
From: Alex Petraky <petraky@perx.ru>
Date: Tue, 3 Dec 2024 11:43:28 +0000
Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?=
 =?UTF-8?q?=D0=B2=20=D1=82=D1=80=D0=B0=D0=BD=D1=81=D0=BF=D0=BE=D1=80=D1=82?=
 =?UTF-8?q?=D0=B5=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=B0=20Logs?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 logs/log_test.go | 20 ++++++++++++++++++++
 logs/service.go  | 14 +++++++++++---
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/logs/log_test.go b/logs/log_test.go
index 45d8222a..12aa362a 100644
--- a/logs/log_test.go
+++ b/logs/log_test.go
@@ -106,4 +106,24 @@ func TestFindResult(t *testing.T) {
 		assert.Equal(t, []string{"timestamp"}, res.Options.Sort)
 		assert.Equal(t, []string{"level"}, res.Options.Fields)
 	})
+	t.Run("From PB: with nil filter and options", func(t *testing.T) {
+		res := FindResultFromPB(&pb.FindResult{Filter: nil, Options: nil})
+		assert.NotNil(t, res)
+		assert.Nil(t, res.Options)
+		assert.Nil(t, res.Filter)
+	})
+	t.Run("To PB: with nil filter and options", func(t *testing.T) {
+		res := FindResultToPB(&FindResult{Filter: nil, Options: nil})
+		assert.NotNil(t, res)
+		assert.Nil(t, res.Options)
+		assert.Nil(t, res.Filter)
+	})
+	t.Run("From PB: nil", func(t *testing.T) {
+		res := FindResultFromPB(nil)
+		assert.Nil(t, res)
+	})
+	t.Run("To PB: nil", func(t *testing.T) {
+		res := FindResultToPB(nil)
+		assert.Nil(t, res)
+	})
 }
diff --git a/logs/service.go b/logs/service.go
index 9409b2a4..f91fbcc1 100644
--- a/logs/service.go
+++ b/logs/service.go
@@ -61,6 +61,10 @@ type FindOptions struct {
 
 // FindResultToPB перевод в proto представление FindResult
 func FindResultToPB(result *FindResult) *pb.FindResult {
+	if result == nil {
+		return nil
+	}
+
 	findResult := &pb.FindResult{Total: 0} // поле стало deprecated всегда возвращаем 0
 
 	entries := make([]*pb.LogEntry, 0, len(result.Entries))
@@ -70,7 +74,7 @@ func FindResultToPB(result *FindResult) *pb.FindResult {
 	findResult.Entries = entries
 
 	if result.Filter != nil {
-		findResult.Filter.Q = result.Filter.Q
+		findResult.Filter = &pb.Filter{Q: result.Filter.Q}
 	}
 	if result.Options != nil {
 		findResult.Options = FindOptionsToPB(result.Options)
@@ -89,7 +93,11 @@ func FindResultToPB(result *FindResult) *pb.FindResult {
 
 // FindResultFromPB перевод из proto представления FindResult
 func FindResultFromPB(result *pb.FindResult) *FindResult {
-	findResult := new(FindResult)
+	if result == nil {
+		return nil
+	}
+
+	findResult := &FindResult{}
 
 	entries := make([]*Entry, 0, len(result.Entries))
 	for _, e := range result.Entries {
@@ -98,7 +106,7 @@ func FindResultFromPB(result *pb.FindResult) *FindResult {
 	findResult.Entries = entries
 
 	if result.Filter != nil {
-		findResult.Filter.Q = result.Filter.Q
+		findResult.Filter = &Filter{Q: result.Filter.Q}
 	}
 	if result.Options != nil {
 		findResult.Options = FindOptionsFromPB(result.Options)
-- 
GitLab