mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 06:12:25 -06:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright 2022 gRPC authors.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 * you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 * You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *     http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 * See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 * limitations under the License.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package channelz
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import "fmt"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Identifier is an opaque identifier which uniquely identifies an entity in the
							 | 
						||
| 
								 | 
							
								// channelz database.
							 | 
						||
| 
								 | 
							
								type Identifier struct {
							 | 
						||
| 
								 | 
							
									typ RefChannelType
							 | 
						||
| 
								 | 
							
									id  int64
							 | 
						||
| 
								 | 
							
									str string
							 | 
						||
| 
								 | 
							
									pid *Identifier
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Type returns the entity type corresponding to id.
							 | 
						||
| 
								 | 
							
								func (id *Identifier) Type() RefChannelType {
							 | 
						||
| 
								 | 
							
									return id.typ
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Int returns the integer identifier corresponding to id.
							 | 
						||
| 
								 | 
							
								func (id *Identifier) Int() int64 {
							 | 
						||
| 
								 | 
							
									return id.id
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// String returns a string representation of the entity corresponding to id.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// This includes some information about the parent as well. Examples:
							 | 
						||
| 
								 | 
							
								// Top-level channel: [Channel #channel-number]
							 | 
						||
| 
								 | 
							
								// Nested channel:    [Channel #parent-channel-number Channel #channel-number]
							 | 
						||
| 
								 | 
							
								// Sub channel:       [Channel #parent-channel SubChannel #subchannel-number]
							 | 
						||
| 
								 | 
							
								func (id *Identifier) String() string {
							 | 
						||
| 
								 | 
							
									return id.str
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Equal returns true if other is the same as id.
							 | 
						||
| 
								 | 
							
								func (id *Identifier) Equal(other *Identifier) bool {
							 | 
						||
| 
								 | 
							
									if (id != nil) != (other != nil) {
							 | 
						||
| 
								 | 
							
										return false
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if id == nil && other == nil {
							 | 
						||
| 
								 | 
							
										return true
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return id.typ == other.typ && id.id == other.id && id.pid == other.pid
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// NewIdentifierForTesting returns a new opaque identifier to be used only for
							 | 
						||
| 
								 | 
							
								// testing purposes.
							 | 
						||
| 
								 | 
							
								func NewIdentifierForTesting(typ RefChannelType, id int64, pid *Identifier) *Identifier {
							 | 
						||
| 
								 | 
							
									return newIdentifer(typ, id, pid)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func newIdentifer(typ RefChannelType, id int64, pid *Identifier) *Identifier {
							 | 
						||
| 
								 | 
							
									str := fmt.Sprintf("%s #%d", typ, id)
							 | 
						||
| 
								 | 
							
									if pid != nil {
							 | 
						||
| 
								 | 
							
										str = fmt.Sprintf("%s %s", pid, str)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return &Identifier{typ: typ, id: id, str: str, pid: pid}
							 | 
						||
| 
								 | 
							
								}
							 |