blob: f7deb1d5edaa23755696fea61f8234f0871e41d0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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
*
* https://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 utils
import "container/list"
const (
rwDataTypeKey = "dataType"
rwBitLengthKey = "bitLength"
rwStringRepresentationKey = "stringRepresentation"
rwBitKey = "bit"
rwByteKey = "byte"
rwUintKey = "uint"
rwIntKey = "int"
rwFloatKey = "float"
rwStringKey = "string"
rwEncodingKey = "encoding"
rwIsListKey = "isList"
)
type BufferCommons struct {
}
func (b BufferCommons) SanitizeLogicalName(logicalName string) string {
if logicalName == "" {
return "value"
}
return logicalName
}
func (b BufferCommons) IsToBeRenderedAsList(readerWriterArgs ...WithReaderWriterArgs) bool {
for _, arg := range readerWriterArgs {
if !arg.isWriterArgs() && !arg.isReaderArgs() {
panic("not a reader or writer arg")
}
switch rwArg := arg.(type) {
case withRenderAsList:
return rwArg.renderAsList
case readerWriterArg:
switch rArg := rwArg.WithReaderArgs.(type) {
case withRenderAsList:
return rArg.renderAsList
}
switch wArg := rwArg.WithWriterArgs.(type) {
case withRenderAsList:
return wArg.renderAsList
}
}
}
return false
}
func (b BufferCommons) ExtractAdditionalStringRepresentation(readerWriterArgs ...WithReaderWriterArgs) string {
for _, arg := range readerWriterArgs {
if !arg.isWriterArgs() && !arg.isReaderArgs() {
panic("not a reader or writer arg")
}
switch rwArg := arg.(type) {
case withAdditionalStringRepresentation:
return rwArg.stringRepresentation
case readerWriterArg:
switch rArg := rwArg.WithReaderArgs.(type) {
case withAdditionalStringRepresentation:
return rArg.stringRepresentation
}
switch wArg := rwArg.WithWriterArgs.(type) {
case withAdditionalStringRepresentation:
return wArg.stringRepresentation
}
}
}
return ""
}
func (b BufferCommons) ExtractEncoding(readerWriterArgs ...WithReaderWriterArgs) string {
for _, arg := range readerWriterArgs {
if !arg.isWriterArgs() && !arg.isReaderArgs() {
panic("not a reader or writer arg")
}
switch rwArg := arg.(type) {
case withEncoding:
return rwArg.encoding
case readerWriterArg:
switch rArg := rwArg.WithReaderArgs.(type) {
case withEncoding:
return rArg.encoding
}
switch wArg := rwArg.WithWriterArgs.(type) {
case withEncoding:
return wArg.encoding
}
}
}
return ""
}
type Stack struct {
list.List
}
func (s *Stack) Push(value any) any {
s.PushBack(value)
return value
}
func (s *Stack) Pop() any {
element := s.Back()
if element == nil {
return nil
}
s.Remove(element)
return element.Value
}
func (s *Stack) Peek() any {
back := s.Back()
if back == nil {
return nil
}
return back.Value
}
func (s *Stack) Empty() bool {
return s.Len() == 0
}