github.com/alimy/mir/v4@v4.1.0/assert/assert.go (about) 1 // Copyright 2023 Michael Li <alimy@gility.net>. All rights reserved. 2 // Use of this source code is governed by Apache License 2.0 that 3 // can be found in the LICENSE file. 4 5 package assert 6 7 import ( 8 "github.com/alimy/mir/v4" 9 ) 10 11 var ( 12 _typeAssertor TypeAssertor = anyTypeAssertor[fakeType]{} 13 ) 14 15 // fakeType just a fake type for default type assertor 16 type fakeType struct{} 17 18 // Binding[T] binding interface for custom T context 19 type Binding[T any] interface { 20 Bind(T) mir.Error 21 } 22 23 // Binding2[R, P] binding interface for custom R, P context 24 type Binding2[R, P any] interface { 25 Bind(R, P) mir.Error 26 } 27 28 // Render[T] render interface for custom T context 29 type Render[T any] interface { 30 Render(T) 31 } 32 33 // Render[C, T] render interface for custom C, T context 34 type Render2[C, T any] interface { 35 Render(C, T) 36 } 37 38 // TypeAssertor type assert for Binding and Render interface 39 type TypeAssertor interface { 40 AssertBinding(any) bool 41 AssertRender(any) bool 42 } 43 44 // Register register custom TypeAssertor to assert Binding/Render interface 45 func Register(ta TypeAssertor) { 46 _typeAssertor = ta 47 } 48 49 // RegisterType[T] register custom TypeAssertor to assert Binding[T]/Render[T] interface 50 func RegisterType[T any]() { 51 _typeAssertor = anyTypeAssertor[T]{} 52 } 53 54 // RegisterType2[B, R] register custom TypeAssertor to assert Binding[B]/Render[R] interface 55 func RegisterType2[B, R any]() { 56 _typeAssertor = anyTypeAssertor2[B, R]{} 57 } 58 59 // RegisterType2[B, P, R] register custom TypeAssertor to assert Binding[B]/Render[R] interface 60 func RegisterType3[B, P, R any]() { 61 _typeAssertor = anyTypeAssertor3[B, P, R]{} 62 } 63 64 // RegisterType4[C, T] register custom TypeAssertor to assert C, T interface 65 func RegisterType4[C, T any]() { 66 _typeAssertor = anyTypeAssertor4[C, T]{} 67 } 68 69 // AssertBinding assert Binding interface for obj 70 func AssertBinding(obj any) bool { 71 return _typeAssertor.AssertBinding(obj) 72 } 73 74 // AssertRender assert Render interface for obj 75 func AssertRender(obj any) bool { 76 return _typeAssertor.AssertRender(obj) 77 }