mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-06 22:36:23 +00:00
98 lines
2.9 KiB
Go
98 lines
2.9 KiB
Go
package common
|
|
|
|
// Example showing how to use the common handler interfaces
|
|
// This file demonstrates the handler interface hierarchy and usage patterns
|
|
|
|
// ProcessWithAnyHandler demonstrates using the base SpecHandler interface
|
|
// which works with any handler type (resolvespec, restheadspec, or funcspec)
|
|
func ProcessWithAnyHandler(handler SpecHandler) Database {
|
|
// All handlers expose GetDatabase() through the SpecHandler interface
|
|
return handler.GetDatabase()
|
|
}
|
|
|
|
// ProcessCRUDRequest demonstrates using the CRUDHandler interface
|
|
// which works with resolvespec.Handler and restheadspec.Handler
|
|
func ProcessCRUDRequest(handler CRUDHandler, w ResponseWriter, r Request, params map[string]string) {
|
|
// Both resolvespec and restheadspec handlers implement Handle()
|
|
handler.Handle(w, r, params)
|
|
}
|
|
|
|
// ProcessMetadataRequest demonstrates getting metadata from CRUD handlers
|
|
func ProcessMetadataRequest(handler CRUDHandler, w ResponseWriter, r Request, params map[string]string) {
|
|
// Both resolvespec and restheadspec handlers implement HandleGet()
|
|
handler.HandleGet(w, r, params)
|
|
}
|
|
|
|
// Example usage patterns (not executable, just for documentation):
|
|
/*
|
|
// Example 1: Using with resolvespec.Handler
|
|
func ExampleResolveSpec() {
|
|
db := // ... get database
|
|
registry := // ... get registry
|
|
|
|
handler := resolvespec.NewHandler(db, registry)
|
|
|
|
// Can be used as SpecHandler
|
|
var specHandler SpecHandler = handler
|
|
database := specHandler.GetDatabase()
|
|
|
|
// Can be used as CRUDHandler
|
|
var crudHandler CRUDHandler = handler
|
|
crudHandler.Handle(w, r, params)
|
|
crudHandler.HandleGet(w, r, params)
|
|
}
|
|
|
|
// Example 2: Using with restheadspec.Handler
|
|
func ExampleRestHeadSpec() {
|
|
db := // ... get database
|
|
registry := // ... get registry
|
|
|
|
handler := restheadspec.NewHandler(db, registry)
|
|
|
|
// Can be used as SpecHandler
|
|
var specHandler SpecHandler = handler
|
|
database := specHandler.GetDatabase()
|
|
|
|
// Can be used as CRUDHandler
|
|
var crudHandler CRUDHandler = handler
|
|
crudHandler.Handle(w, r, params)
|
|
crudHandler.HandleGet(w, r, params)
|
|
}
|
|
|
|
// Example 3: Using with funcspec.Handler
|
|
func ExampleFuncSpec() {
|
|
db := // ... get database
|
|
|
|
handler := funcspec.NewHandler(db)
|
|
|
|
// Can be used as SpecHandler
|
|
var specHandler SpecHandler = handler
|
|
database := specHandler.GetDatabase()
|
|
|
|
// Can be used as QueryHandler
|
|
var queryHandler QueryHandler = handler
|
|
// funcspec has different methods: SqlQueryList() and SqlQuery()
|
|
// which return HTTP handler functions
|
|
}
|
|
|
|
// Example 4: Polymorphic handler processing
|
|
func ProcessHandlers(handlers []SpecHandler) {
|
|
for _, handler := range handlers {
|
|
// All handlers expose the database
|
|
db := handler.GetDatabase()
|
|
|
|
// Type switch for specific handler types
|
|
switch h := handler.(type) {
|
|
case CRUDHandler:
|
|
// This is resolvespec or restheadspec
|
|
// Can call Handle() and HandleGet()
|
|
_ = h
|
|
case QueryHandler:
|
|
// This is funcspec
|
|
// Can call SqlQueryList() and SqlQuery()
|
|
_ = h
|
|
}
|
|
}
|
|
}
|
|
*/
|