github.com/e154/smart-home@v0.17.2-0.20240311175135-e530a6e5cd45/plugins/mqtt/storage.go (about) 1 // This file is part of the Smart Home 2 // Program complex distribution https://github.com/e154/smart-home 3 // Copyright (C) 2016-2023, Filippov Alex 4 // 5 // This library is free software: you can redistribute it and/or 6 // modify it under the terms of the GNU Lesser General Public 7 // License as published by the Free Software Foundation; either 8 // version 3 of the License, or (at your option) any later version. 9 // 10 // This library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 // Library General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public 16 // License along with this library. If not, see 17 // <https://www.gnu.org/licenses/>. 18 19 package mqtt 20 21 import ( 22 "sync" 23 ) 24 25 // Storage ... 26 type Storage struct { 27 mx *sync.Mutex 28 pull map[string]interface{} 29 } 30 31 // NewStorage ... 32 func NewStorage() Storage { 33 return Storage{ 34 mx: &sync.Mutex{}, 35 pull: make(map[string]interface{}), 36 } 37 } 38 39 // GetVar ... 40 func (s *Storage) GetVar(key string) (value interface{}) { 41 42 s.mx.Lock() 43 if v, ok := s.pull[key]; ok { 44 value = v 45 } else { 46 value = nil 47 } 48 s.mx.Unlock() 49 return 50 } 51 52 // SetVar ... 53 func (s *Storage) SetVar(key string, value interface{}) { 54 55 s.mx.Lock() 56 s.pull[key] = value 57 s.mx.Unlock() 58 } 59 60 func (s *Storage) copy(newPull map[string]interface{}) { 61 s.mx.Lock() 62 for key := range s.pull { 63 delete(s.pull, key) 64 } 65 for k, v := range newPull { 66 s.pull[k] = v 67 } 68 s.mx.Unlock() 69 }