// Generated by Lisette bindgen
// Source: plugin (Go stdlib)
// Go: 1.25.10
// Lisette: 0.2.1

/// Open opens a Go plugin.
/// If a path has already been opened, then the existing *[Plugin] is returned.
/// It is safe for concurrent use by multiple goroutines.
pub fn Open(path: string) -> Result<Ref<Plugin>, error>

/// Plugin is a loaded Go plugin.
pub type Plugin

/// A Symbol is a pointer to a variable or function.
/// 
/// For example, a plugin defined as
/// 
/// 	package main
/// 
/// 	import "fmt"
/// 
/// 	var V int
/// 
/// 	func F() { fmt.Printf("Hello, number %d\n", V) }
/// 
/// may be loaded with the [Open] function and then the exported package
/// symbols V and F can be accessed
/// 
/// 	p, err := plugin.Open("plugin_name.so")
/// 	if err != nil {
/// 		panic(err)
/// 	}
/// 	v, err := p.Lookup("V")
/// 	if err != nil {
/// 		panic(err)
/// 	}
/// 	f, err := p.Lookup("F")
/// 	if err != nil {
/// 		panic(err)
/// 	}
/// 	*v.(*int) = 7
/// 	f.(func())() // prints "Hello, number 7"
pub type Symbol = Unknown

impl Plugin {
  /// Lookup searches for a symbol named symName in plugin p.
  /// A symbol is any exported variable or function.
  /// It reports an error if the symbol is not found.
  /// It is safe for concurrent use by multiple goroutines.
  fn Lookup(self: Ref<Plugin>, symName: string) -> Result<Symbol, error>
}
