diff --git a/sapis/tokens/builder.go b/sapis/tokens/builder.go new file mode 100644 index 0000000..1dd67c8 --- /dev/null +++ b/sapis/tokens/builder.go @@ -0,0 +1,26 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_builder.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + + diff --git a/sapis/tokens/builder_options.go b/sapis/tokens/builder_options.go new file mode 100644 index 0000000..8e9bb1e --- /dev/null +++ b/sapis/tokens/builder_options.go @@ -0,0 +1,64 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_builder_options.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + +import "activething.com/go/gogo/core/opts" + +type ( + + BuilderOptions struct { + Sep byte + Wildcard byte + Relative byte + MatchIni byte + MatchEnd byte + + TokenMinLen int + TokenMaxLen int + TopicMinLen int + TopicMaxLen int + TopicMinTokens int + TopicMaxTokens int + } + + +) + + +func NewBuilderOptions (options ... opts.OptionFnc[BuilderOptions]) *BuilderOptions { + return opts.Apply(&BuilderOptions{ + Sep : tokenSep, + Wildcard : tokenWildcard, + Relative : tokenRelative, + MatchIni : tokenMatchIni, + MatchEnd : tokenMatchEnd, + + TokenMinLen: tokenMinLen, + TokenMaxLen: tokenMaxLen, + TopicMinLen: topicMinLen, + TopicMaxLen: topicMaxLen, + TopicMinTokens: topicMinTokens, + TopicMaxTokens: topicMaxTokens, + }, options ...) +} \ No newline at end of file diff --git a/sapis/tokens/gogo.go b/sapis/tokens/gogo.go new file mode 100644 index 0000000..5c75228 --- /dev/null +++ b/sapis/tokens/gogo.go @@ -0,0 +1,72 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name gogo.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + +import "activething.com/go/gogo/core/errs" + + + + +const ( + topicMinLen int = 1 + topicMaxLen int = 255 + topicMaxTokens int = 32 + topicMinTokens int = 1 + + tokenMinLen int = 1 + tokenMaxLen int = 256 + + // + // Token chars + // + tokenSep byte = '.' + tokenWildcard byte = '*' + tokenRelative byte = '+' + tokenMatchIni byte = '{' + tokenMatchEnd byte = '}' +) + + + + +var ( + + G = struct { + + ErrInvalidTopic errs.ErrCode + ErrInvalidTopicLen errs.ErrCode + ErrInvalidToken errs.ErrCode + ErrInvalidTokenLen errs.ErrCode + + }{ + + ErrInvalidTopic : errs.ErrCode ("sapis:tokens.invalid-topic"), + ErrInvalidTopicLen : errs.ErrCode ("sapis:tokens.invalid-topic-len"), + ErrInvalidToken : errs.ErrCode ("sapis:tokens.invalid-token"), + ErrInvalidTokenLen : errs.ErrCode ("sapis:tokens.invalid-token-len"), + + } + +) + diff --git a/sapis/tokens/token_invalid.go b/sapis/tokens/token_invalid.go new file mode 100644 index 0000000..33b4fc0 --- /dev/null +++ b/sapis/tokens/token_invalid.go @@ -0,0 +1,68 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_invalid.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + + + +type ( + + + TokenInvalid struct { + /*embedded*/ error + source []byte + } +) + + +func NewTokenInvalid(err error, src []byte) *TokenInvalid { + return &TokenInvalid{ + error: err, + source: src, + } +} + + +func (_ TokenInvalid) Kind() TokenKind { + return TokenKindInvalid } + + +func (_ TokenInvalid) Match(_ []byte) bool { + return false } + +func (t TokenInvalid) Source() []byte { + return t.source } + + +/* + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + I HAVE NO DESIRE TO WALK ON WATER," SAID SIDDHARTA. + "LET THE OLD SHRAMANAS SATISFY THEMSELVES WITH SUCH SKILLS. + + SIDDHARTA + - HERMANN HESSE - + + ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +*/ diff --git a/sapis/tokens/token_matcher.go b/sapis/tokens/token_matcher.go new file mode 100644 index 0000000..20808ed --- /dev/null +++ b/sapis/tokens/token_matcher.go @@ -0,0 +1,73 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_matcher.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + +import "activething.com/go/gogo/sapis/matches" + +type ( + + + TokenMatcher struct { + source []byte + MatchFn matches.MatchFnc + } +) + + + +func NewTokenMatcher(mfn matches.MatchFnc, src []byte) *TokenMatcher { + return &TokenMatcher{ + MatchFn: mfn, + source: src, + } +} + + +func (_ TokenMatcher) Kind() TokenKind { + return TokenKindMatcher } + + +func (t TokenMatcher) Match(val []byte) bool { + return t.MatchFn(val) } + + +func (t TokenMatcher) Source() []byte { + return t.source } + + +/* + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + I HAVE NO DESIRE TO WALK ON WATER," SAID SIDDHARTA. + "LET THE OLD SHRAMANAS SATISFY THEMSELVES WITH SUCH SKILLS. + + SIDDHARTA + - HERMANN HESSE - + + ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +*/ + + + diff --git a/sapis/tokens/token_relative.go b/sapis/tokens/token_relative.go new file mode 100644 index 0000000..71f2bfa --- /dev/null +++ b/sapis/tokens/token_relative.go @@ -0,0 +1,59 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_relative.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + + + +type ( + + + TokenRelative struct{} +) + + +func (_ TokenRelative) Kind() TokenKind { + return TokenKindRelative } + + +func (_ TokenRelative) Match(_ []byte) bool { + return true } + + +func (t TokenRelative) Source() []byte { + return nil } + + + +/* + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + I HAVE NO DESIRE TO WALK ON WATER," SAID SIDDHARTA. + "LET THE OLD SHRAMANAS SATISFY THEMSELVES WITH SUCH SKILLS. + + SIDDHARTA + - HERMANN HESSE - + + ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +*/ \ No newline at end of file diff --git a/sapis/tokens/token_wildcard.go b/sapis/tokens/token_wildcard.go new file mode 100644 index 0000000..09e789f --- /dev/null +++ b/sapis/tokens/token_wildcard.go @@ -0,0 +1,60 @@ +// ------------------------------------------------------------------------ +// Project atila +// Active Thing (activething.com) git.activething.com/go +// +// File name token_wildcard.go +// Created by DEV +// Modified 18/02/2024 +// +// Copyright 2024 activething.com +// ------------------------------------------------------------------------ +// 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 tokens + + + +type ( + + + TokenWildcard struct{} +) + + +func (_ TokenWildcard) Kind() TokenKind { + return TokenKindWildcard } + + +func (_ TokenWildcard) Match(_ []byte) bool { + return true } + + +func (t TokenWildcard) Source() []byte { + return nil } + +/* + :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + + I HAVE NO DESIRE TO WALK ON WATER," SAID SIDDHARTA. + "LET THE OLD SHRAMANAS SATISFY THEMSELVES WITH SUCH SKILLS. + + SIDDHARTA + - HERMANN HESSE - + + ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +*/ + + +