move address implementation to separate source file
This commit is contained in:
		
							parent
							
								
									e1bc2322f3
								
							
						
					
					
						commit
						b1cd65ea05
					
				
					 3 changed files with 73 additions and 60 deletions
				
			
		
							
								
								
									
										12
									
								
								lib/lib.go
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								lib/lib.go
									
										
									
									
									
								
							|  | @ -4,9 +4,12 @@ package lib | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	stdlib_context "context" | 	stdlib_context "context" | ||||||
|  | 	"fmt" | ||||||
| 	"sync" | 	"sync" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | // config | ||||||
|  | 
 | ||||||
| type ActionSpec interface { | type ActionSpec interface { | ||||||
| 	Handler() ActionHandler | 	Handler() ActionHandler | ||||||
| 	Receivers() []string | 	Receivers() []string | ||||||
|  | @ -29,6 +32,8 @@ type Config interface { | ||||||
| 	Add(...Config) Config | 	Add(...Config) Config | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // services - context | ||||||
|  | 
 | ||||||
| type Services map[string]Context | type Services map[string]Context | ||||||
| 
 | 
 | ||||||
| type ContextState interface{} | type ContextState interface{} | ||||||
|  | @ -46,7 +51,10 @@ type Context interface { | ||||||
| 	Stop() | 	Stop() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // message, address | ||||||
|  | 
 | ||||||
| type Address interface { | type Address interface { | ||||||
|  | 	fmt.Stringer | ||||||
| 	Url() string | 	Url() string | ||||||
| 	Service() string | 	Service() string | ||||||
| 	Interaction() (string, string) | 	Interaction() (string, string) | ||||||
|  | @ -59,6 +67,8 @@ type Message interface { | ||||||
| 	Sender() Address | 	Sender() Address | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // action | ||||||
|  | 
 | ||||||
| type Action interface { | type Action interface { | ||||||
| 	Context() Context | 	Context() Context | ||||||
| 	Spec() ActionSpec | 	Spec() ActionSpec | ||||||
|  | @ -66,6 +76,8 @@ type Action interface { | ||||||
| 	Handle() bool | 	Handle() bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // procedures and handlers | ||||||
|  | 
 | ||||||
| type Proc = func(Context) | type Proc = func(Context) | ||||||
| type StartProc = Proc | type StartProc = Proc | ||||||
| type StepProc = func(Context) bool | type StepProc = func(Context) bool | ||||||
|  |  | ||||||
							
								
								
									
										61
									
								
								lib/message/address.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								lib/message/address.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | ||||||
|  | package message | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"strings" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // Address implementation | ||||||
|  | 
 | ||||||
|  | type address struct { | ||||||
|  | 	url, srv, sid, iid string | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) String() string { | ||||||
|  | 	return fmt.Sprintf("%s#%s/%s/%s", addr.url, addr.srv, addr.sid, addr.iid) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) Url() string { | ||||||
|  | 	return addr.url | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) Service() string { | ||||||
|  | 	return addr.srv | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) Interaction() (sid, iid string) { | ||||||
|  | 	return addr.sid, addr.iid | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) SetUrl(url string) { | ||||||
|  | 	addr.url = url | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (addr *address) SetInteraction(sid, iid string) { | ||||||
|  | 	addr.sid = sid | ||||||
|  | 	addr.iid = iid | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func SimpleAddress(srv string) *address { | ||||||
|  | 	return &address{ | ||||||
|  | 		srv: srv, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func ParseAddress(s string) *address { | ||||||
|  | 	addr := address{} | ||||||
|  | 	p := strings.SplitN(s, "#", 2) | ||||||
|  | 	if len(p) > 1 { | ||||||
|  | 		addr.url = p[0] | ||||||
|  | 		s = p[1] | ||||||
|  | 	} | ||||||
|  | 	p = strings.Split(s, "/") | ||||||
|  | 	addr.srv = p[0] | ||||||
|  | 	if len(p) > 1 { | ||||||
|  | 		addr.sid = p[1] | ||||||
|  | 		if len(p) > 2 { | ||||||
|  | 			addr.iid = p[2] | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return &addr | ||||||
|  | } | ||||||
|  | @ -1,9 +1,6 @@ | ||||||
| package message | package message | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"fmt" |  | ||||||
| 	"strings" |  | ||||||
| 
 |  | ||||||
| 	"git.sr.ht/~cco/go-scopes/lib" | 	"git.sr.ht/~cco/go-scopes/lib" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -24,60 +21,3 @@ func StrMessage(action string) strMessage { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var Quit = StrMessage("quit") | var Quit = StrMessage("quit") | ||||||
| 
 |  | ||||||
| // Address implementation |  | ||||||
| 
 |  | ||||||
| type address struct { |  | ||||||
| 	url, srv, sid, iid string |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) String() string { |  | ||||||
| 	return fmt.Sprintf("%s#%s/%s/%s", addr.url, addr.srv, addr.sid, addr.iid) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) Url() string { |  | ||||||
| 	return addr.url |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) Service() string { |  | ||||||
| 	return addr.srv |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) Interaction() (sid, iid string) { |  | ||||||
| 	return addr.sid, addr.iid |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) SetUrl(url string) { |  | ||||||
| 	addr.url = url |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (addr *address) SetInteraction(sid, iid string) { |  | ||||||
| 	addr.sid = sid |  | ||||||
| 	addr.iid = iid |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func SimpleAddress(srv string) *address { |  | ||||||
| 	return &address{ |  | ||||||
| 		srv: srv, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func ParseAddress(astr string) *address { |  | ||||||
| 	addr := address{} |  | ||||||
| 	p1 := strings.SplitN(astr, "#", 2) |  | ||||||
| 	s1 := p1[0] |  | ||||||
| 	s2 := s1 |  | ||||||
| 	if len(p1) > 1 { |  | ||||||
| 		addr.url = s1 |  | ||||||
| 		s2 = p1[1] |  | ||||||
| 	} |  | ||||||
| 	p2 := strings.Split(s2, "/") |  | ||||||
| 	addr.srv = p2[0] |  | ||||||
| 	if len(p2) > 1 { |  | ||||||
| 		addr.sid = p2[1] |  | ||||||
| 		if len(p2) > 2 { |  | ||||||
| 			addr.iid = p2[2] |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return &addr |  | ||||||
| } |  | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue