mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2015 The Kubernetes 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 dbus
 | 
						|
 | 
						|
import (
 | 
						|
	godbus "github.com/godbus/dbus"
 | 
						|
)
 | 
						|
 | 
						|
// Interface is an interface that presents a subset of the godbus/dbus API.  Use this
 | 
						|
// when you want to inject fakeable/mockable D-Bus behavior.
 | 
						|
type Interface interface {
 | 
						|
	// SystemBus returns a connection to the system bus, connecting to it
 | 
						|
	// first if necessary
 | 
						|
	SystemBus() (Connection, error)
 | 
						|
	// SessionBus returns a connection to the session bus, connecting to it
 | 
						|
	// first if necessary
 | 
						|
	SessionBus() (Connection, error)
 | 
						|
}
 | 
						|
 | 
						|
// Connection represents a D-Bus connection
 | 
						|
type Connection interface {
 | 
						|
	// Returns an Object representing the bus itself
 | 
						|
	BusObject() Object
 | 
						|
 | 
						|
	// Object creates a representation of a remote D-Bus object
 | 
						|
	Object(name, path string) Object
 | 
						|
 | 
						|
	// Signal registers or unregisters a channel to receive D-Bus signals
 | 
						|
	Signal(ch chan<- *godbus.Signal)
 | 
						|
}
 | 
						|
 | 
						|
// Object represents a remote D-Bus object
 | 
						|
type Object interface {
 | 
						|
	// Call synchronously calls a D-Bus method
 | 
						|
	Call(method string, flags godbus.Flags, args ...interface{}) Call
 | 
						|
}
 | 
						|
 | 
						|
// Call represents a pending or completed D-Bus method call
 | 
						|
type Call interface {
 | 
						|
	// Store returns a completed call's return values, or an error
 | 
						|
	Store(retvalues ...interface{}) error
 | 
						|
}
 | 
						|
 | 
						|
// Implements Interface in terms of actually talking to D-Bus
 | 
						|
type dbusImpl struct {
 | 
						|
	systemBus  *connImpl
 | 
						|
	sessionBus *connImpl
 | 
						|
}
 | 
						|
 | 
						|
// Implements Connection as a godbus.Conn
 | 
						|
type connImpl struct {
 | 
						|
	conn *godbus.Conn
 | 
						|
}
 | 
						|
 | 
						|
// Implements Object as a godbus.Object
 | 
						|
type objectImpl struct {
 | 
						|
	object godbus.BusObject
 | 
						|
}
 | 
						|
 | 
						|
// Implements Call as a godbus.Call
 | 
						|
type callImpl struct {
 | 
						|
	call *godbus.Call
 | 
						|
}
 | 
						|
 | 
						|
// New returns a new Interface which will use godbus to talk to D-Bus
 | 
						|
func New() Interface {
 | 
						|
	return &dbusImpl{}
 | 
						|
}
 | 
						|
 | 
						|
// SystemBus is part of Interface
 | 
						|
func (db *dbusImpl) SystemBus() (Connection, error) {
 | 
						|
	if db.systemBus == nil {
 | 
						|
		bus, err := godbus.SystemBus()
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		db.systemBus = &connImpl{bus}
 | 
						|
	}
 | 
						|
 | 
						|
	return db.systemBus, nil
 | 
						|
}
 | 
						|
 | 
						|
// SessionBus is part of Interface
 | 
						|
func (db *dbusImpl) SessionBus() (Connection, error) {
 | 
						|
	if db.sessionBus == nil {
 | 
						|
		bus, err := godbus.SessionBus()
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		db.sessionBus = &connImpl{bus}
 | 
						|
	}
 | 
						|
 | 
						|
	return db.sessionBus, nil
 | 
						|
}
 | 
						|
 | 
						|
// BusObject is part of the Connection interface
 | 
						|
func (conn *connImpl) BusObject() Object {
 | 
						|
	return &objectImpl{conn.conn.BusObject()}
 | 
						|
}
 | 
						|
 | 
						|
// Object is part of the Connection interface
 | 
						|
func (conn *connImpl) Object(name, path string) Object {
 | 
						|
	return &objectImpl{conn.conn.Object(name, godbus.ObjectPath(path))}
 | 
						|
}
 | 
						|
 | 
						|
// Signal is part of the Connection interface
 | 
						|
func (conn *connImpl) Signal(ch chan<- *godbus.Signal) {
 | 
						|
	conn.conn.Signal(ch)
 | 
						|
}
 | 
						|
 | 
						|
// Call is part of the Object interface
 | 
						|
func (obj *objectImpl) Call(method string, flags godbus.Flags, args ...interface{}) Call {
 | 
						|
	return &callImpl{obj.object.Call(method, flags, args...)}
 | 
						|
}
 | 
						|
 | 
						|
// Store is part of the Call interface
 | 
						|
func (call *callImpl) Store(retvalues ...interface{}) error {
 | 
						|
	return call.call.Store(retvalues...)
 | 
						|
}
 |