state.go (2189B)
1 // GoToSocial 2 // Copyright (C) GoToSocial Authors admin@gotosocial.org 3 // SPDX-License-Identifier: AGPL-3.0-or-later 4 // 5 // This program is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU Affero General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // This program 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 13 // GNU Affero General Public License for more details. 14 // 15 // You should have received a copy of the GNU Affero General Public License 16 // along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 package state 19 20 import ( 21 "github.com/superseriousbusiness/gotosocial/internal/cache" 22 "github.com/superseriousbusiness/gotosocial/internal/db" 23 "github.com/superseriousbusiness/gotosocial/internal/storage" 24 "github.com/superseriousbusiness/gotosocial/internal/timeline" 25 "github.com/superseriousbusiness/gotosocial/internal/workers" 26 ) 27 28 // State provides a means of dependency injection and sharing of resources 29 // across different subpackages of the GoToSocial codebase. DO NOT assume 30 // that any particular field will be initialized if you are accessing this 31 // during initialization. A pointer to a State{} is often passed during 32 // subpackage initialization, while the returned subpackage type will later 33 // then be set and stored within the State{} itself. 34 type State struct { 35 // Caches provides access to this state's collection of caches. 36 Caches cache.Caches 37 38 // Timelines provides access to this state's collection of timelines. 39 Timelines timeline.Timelines 40 41 // DB provides access to the database. 42 DB db.DB 43 44 // Storage provides access to the storage driver. 45 Storage *storage.Driver 46 47 // Workers provides access to this state's collection of worker pools. 48 Workers workers.Workers 49 50 // prevent pass-by-value. 51 _ nocopy 52 } 53 54 // nocopy when embedded will signal linter to 55 // error on pass-by-value of parent struct. 56 type nocopy struct{} 57 58 func (*nocopy) Lock() {} 59 60 func (*nocopy) Unlock() {}