moira

Форк
0
/
contact.go 
51 строка · 1.3 Кб
1
package reply
2

3
import (
4
	"encoding/json"
5
	"fmt"
6

7
	"github.com/garyburd/redigo/redis"
8

9
	"go.avito.ru/DO/moira"
10
	"go.avito.ru/DO/moira/database"
11
)
12

13
// Contact converts redis DB reply to moira.ContactData object
14
func Contact(rep interface{}, err error) (moira.ContactData, error) {
15
	contact := moira.ContactData{}
16
	bytes, err := redis.Bytes(rep, err)
17
	if err != nil {
18
		if err == redis.ErrNil {
19
			return contact, database.ErrNil
20
		}
21
		return contact, fmt.Errorf("Failed to read contact: %s", err.Error())
22
	}
23
	err = json.Unmarshal(bytes, &contact)
24
	if err != nil {
25
		return contact, fmt.Errorf("Failed to parse contact json %s: %s", string(bytes), err.Error())
26
	}
27
	return contact, nil
28
}
29

30
// Contacts converts redis DB reply to moira.ContactData objects array
31
func Contacts(rep interface{}, err error) ([]*moira.ContactData, error) {
32
	values, err := redis.Values(rep, err)
33
	if err != nil {
34
		if err == redis.ErrNil {
35
			return make([]*moira.ContactData, 0), nil
36
		}
37
		return nil, fmt.Errorf("Failed to read contacts: %s", err.Error())
38
	}
39
	contacts := make([]*moira.ContactData, len(values))
40
	for i, value := range values {
41
		contact, err2 := Contact(value, err)
42
		if err2 != nil && err2 != database.ErrNil {
43
			return nil, err2
44
		} else if err2 == database.ErrNil {
45
			contacts[i] = nil
46
		} else {
47
			contacts[i] = &contact
48
		}
49
	}
50
	return contacts, nil
51
}
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.