watson

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 12, 2021 License: Apache-2.0 Imports: 6 Imported by: 2

README

WATSON: Wasted but Amazing Turing-incomplete Stack-based Object Notation

ci status

WATSON

(image from walfie gif)

Watson makes it hard but fun to write configuration files.

Index

Installation

Download latest binaries from releases.

Or you can build binaries from source code.

$ git clone git@github.com:genkami/watson.git
$ cd watson/cmd/watson
$ go install

Overview of Language Specification

For complete information, please visit full specification.

Watson internally has a stack-based virtual machine called Watson VM. Each character of Watson files is considered as an instruction to Watson VM.

Integer

Integer (Int) is a 64-bit signed integer.

Basic instructions for Int are as follows:

  • B : pushes a zero to the stack
  • u : increments a value at the top of the stack
  • b : shifts a value at the top of the stack to the left by one bit
  • a : adds two values on the top of the stack

You can create arbitrary integers by using these instructions:

$ echo 'BBuaBubaBubbbaBubbbbaBubbbbbaBubbbbbba' | watson decode -t json
123
String

String is a byte array.

There are two instructions that manipulate String values:

  • ? : pushes an empty string
  • ! : appends a lowest byte of the top of the stack to a string at the second top of the stack

Every time an empty string is pushed, the ASCII characters used for stack manipulation are updated. The above six instructions B, u, b, a, ?, and !, are changed to S, h, a, k, $, and -, respectively. Pushing an empty string again resets to the orignal characters.

$ echo '?SShaakShaaaakShaaaaakShaaaaaak-SShkShaaaaakShaaaaaak-SShkShakShaaakShaaaaakShaaaaaak-SShkShakShaakShaaakShaaaaakShaaaaaak-' | watson decode -t json
"tako"
Object

Object is a set of key-value pairs.

There are two instructions that manipulate Object values:

  • ~ : pushes an empty Object
  • M : pops three values v, k, o in this order, set o[k] = v, and then pushes o

Note that once ? is invoked these are changed to + and g respectively.

Examples

You can see more examples here.

Hello World
$ echo '
~?ShaaaaaarrShaaaaarrkShaaarrk-
SameeShaaaaaarrShaaaaarrkShaarrkShrrk-
ShaaaaaarrShaaaaakSameeShaaarrkShaarrk-
ShaaaaaarrShaaaaarrkShaaarrkShaarrk-
ShaaaaaarrShaaaaarrkShaaarrkShaarrkSharrkShrrk-$
BubbbbbbBubbbbbaBubbbbaBubbaBubaBua!
BubbbbbbBubbbbbaBubbbaBubbaBubaBua!
BubbbbbbBubbbbbaBubbbbaBuba!
BubbbbbbBubbbbbaBubbbaBubba!
BubbbbbbBubbbbbaBubba!M?
ShaaaaaaShaaaaakShaakShak-
ShaaaaaaShaaaaakShaaakShk-
ShaaaaaaShaaaaakShaaaakShak-
ShaaaaaaShaaaaakShaaaakShakShk-
ShaaaaaaShaaaaakShaaaakShaak-
^!!!!!!!!!!!!!g
' | watson decode -t yaml
first: true
hello: world
Deploying Nginx Using Kubernetes
$ echo '
@~?
SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-Samee+$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MMM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-Samee+$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaAAME#?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MMM?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!~?
SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-ggg$
BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!~?
SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-vSamee+$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!~?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!?
SShkSharrkShaarrkShaaarrkShaaaaarrk-ggg$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!~?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!?
SShkSharrkShaarrkShaaarrkShaaaaarrk-ggg$
BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!?
SShkShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!?
SShkShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShaaaarrkShaaaaarrk-SShkShaarrkShaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-gg$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkSharrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbaBubbbbba!BBubbbbaBubbbbba!BBubbbbaBubbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbaBubbbbba!BBubbbbaBubbbbba!BBubbbbaBubbbbba!BBuaBubbaBubbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!MMM?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbaBubbbbaBubbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbaBubbbbbba!BBubaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!M?
SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-vSamee+$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbbaAAME#?
SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbaBubbbbbba!BBuaBubaBubbbbbba!BBubbbbaBubbbbbba!MsMsMMMM?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbaBubbbbba!Ms~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbaBubbbbba!M?
SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-$
BBuaBubaBubbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!M?
SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-Samee+$
BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!~?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!M?
SShkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MM?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbaBubbbbaBubbbbbaBubbbbbba!MM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-Samee+$
BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!@~?
SShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-$
BBubbaBubbbbaBubbbbbba!BBuaBubaBubbbbbba!BBubbbbaBubbbbbba!M?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-$
BBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!M?
SShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrkg$
BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbbaAAME#sM?
SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-Samee+$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-g$
BBuaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBubaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbba!BBuaBubaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!?
SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-gg$
BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbaBubbbbbaBubbbbbba!BBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShkSharrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaaarrk-SShaaaarrkShaaaaaarrk-gg?
' | watson decode -t yaml | kubectl apply -f
deployment.apps/nginx created
service/nginx created
Function
$ cat examples/function/args.watson
?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-%

$ cat examples/function/function.watson
+$
BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!BBubaBubbbbaBubbbbbaBubbbbbba!BBubaBubbaBubbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaarrk-SSharrkShaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-g
:$BBubaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!%M%

$ watson decode -t yaml examples/function/args.watson examples/function/function.watson
anotherValue: this value is loaded from function.watson
value: this value is loaded from args.watson
Converting JSON to YAML via Watson
$ echo '{"foo": "bar", "baz": "quux"}' | watson encode -t json | watson decode -t yaml
baz: quux
foo: bar
Converting a Go Struct into Watson
package main

import (
	"github.com/genkami/watson"
	"os"
)

type User struct {
	FullName string `watson:"fullName"`
	Nickname string `watson:"nickname,omitempty"`
}

func main() {
	user := User{
		FullName: "Motoaki Tanigo",
		Nickname: "YAGOO",
	}
	enc := watson.NewEncoder(os.Stdout)
	err := enc.Encode(&user)
	if err != nil {
		panic(err)
	}
}

output:

~?SShakShaakShaaaaakShaaaaaak-SShkShaakShaaaakShaaaaakShaaaaaak-SShaakShaaakShaaaaakShaaaaaak-SShaakShaaakShaaaaakShaaaaaak-SShakShaakShaaakShaaaaaak-SShkShaaaaakShaaaaaak-SShkShaakShaaakShaaaaakShaaaaaak-SShkShaakShaaaaakShaaaaaak-$BBuaBubbaBubbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBuaBubaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubbbbba!BBubbaBubbbbaBubbbbbba!BBuaBubbbbbaBubbbbbba!BBubaBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbaBubbbbbba!M?SShakShaakShaaakShaaaaakShaaaaaak-SShkShaaakShaaaaakShaaaaaak-SShkShakShaaaaakShaaaaaak-SShkShakShaaakShaaaaakShaaaaaak-SShakShaakShaaakShaaaaakShaaaaaak-SShkShaaaaakShaaaaaak-SShkShaakShaaakShaaaaakShaaaaaak-SShkShaakShaaaaakShaaaaaak-$BBuaBubbbaBubbbbaBubbbbbba!BBuaBubbbbbba!BBuaBubaBubbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbba!BBuaBubaBubbaBubbbaBubbbbbba!M

Documentation

Overview

Package watson provides a convenient way of encoding and decoding Watson values.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Marshal

func Marshal(v interface{}) ([]byte, error)

Marshal converts an arbitrary value `v` into Watson by applying the following rules:

  • If v is any of int, int8, int16, int32, or int64, then v is converted to Int.
  • If v is any of uint, uint8, uint16, uint32, or uint64, then v is converted to Uint.
  • If v is float32 or float64, then v is converted to Float.
  • If v is bool, then v is converted to Bool.
  • If v is string, then v is converted to String.
  • If v is a struct that implements `types.Marshaler`, then v is converted to Value by calling `v.MarshalWatson()`.
  • If v is a struct that does not implement `types.Marshaler`, then v is converted to Object with its keys correspond to the fields of v.
  • If v is a slice or an array, then v is converted to Array with its elements converted by these rules.
  • If v is a map, then v is converted to Object with its elements converted by these rules.
  • If v is a pointer, then v is converted to `Value` by converting `*v` with these rules.

Note that you can configure struct fields by adding "watson" tag to fields. Tag must be like `watson:"name,flag1,flag2,...,flagN"`. If Marshal finds a field that has such tag, it uses `name` as a key of output instead of using the name of the field, or omits such field if `name` equals to "-".

Currntly these flags are available:

omitempty      If the field is zero value, it will be omitted from the output.
inline         Inline the field. Currently the field must be a struct.
Example
package main

import (
	"fmt"

	"github.com/genkami/watson"
)

type Person struct {
	FullName string `watson:"fullName"`
	Nickname string `watson:"nickname,omitempty"`
}

func main() {
	user := Person{
		FullName: "Motoaki Tanigo",
		Nickname: "YAGOO",
	}
	buf, err := watson.Marshal(&user)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", buf)
}
Output:

Example (Marshaler)
package main

import (
	"fmt"
	"time"

	"github.com/genkami/watson"
	"github.com/genkami/watson/pkg/types"
)

type Time time.Time

func (t Time) MarshalWatson() (*types.Value, error) {
	return types.NewObjectValue(map[string]*types.Value{
		"unix": types.NewIntValue(time.Time(t).Unix()),
	}), nil
}

func main() {
	now := Time(time.Now())
	buf, err := watson.Marshal(now)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", buf)
}
Output:

Example (Omitempty)
package main

import (
	"fmt"

	"github.com/genkami/watson"
)

type Profile struct {
	Name             string `watson:"name"`
	Age              int    `watson:"age,omitempty"`
	UnsecurePassword string `watson:"-"`
}

func main() {
	profile := Profile{
		Name:             "Calliope Mori",
		UnsecurePassword: "jaoijgeoaivj#&*RJI",
	}
	buf, err := watson.Marshal(&profile)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%s\n", buf)
}
Output:

func Unmarshal

func Unmarshal(buf []byte, v interface{}) error

Unmarshal converts Watson into an arbitrary object.

You can customize its behavior by implementing `types.Unmarshaler`.

See Marshal for details.

Example
package main

import (
	"fmt"

	"github.com/genkami/watson"
)

type Music struct {
	Track int    `watson:"track"`
	Title string `watson:"title"`
}

const marshaledMusic = `
~?
SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkShaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarrkzg$
BBubbaBubbbbaBubbbbbaBubbbbbba!BBuaBubbbaBubbbbbaBubbbbbba!BBubbaBubbbbaBubbbbbaBubbbbbba!BBubbaBubbbaBubbbbbaBubbbbbba!BBuaBubbaBubbbbbaBubbbbbba!?
SShaaarrkShaaaaaarrk-SShkShaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaaarrk-SSharrkShaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaaarrk-g
`

func main() {
	var music Music
	err := watson.Unmarshal([]byte(marshaledMusic), &music)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Track: %d, Title: %s\n", music.Track, music.Title)
}
Output:

Example (Unmarshaler)
package main

import (
	"errors"
	"fmt"
	"strings"

	"github.com/genkami/watson"
	"github.com/genkami/watson/pkg/types"
)

type Email struct {
	Local  string
	Domain string
}

func (e *Email) UnmarshalWatson(v *types.Value) error {
	if v.Kind != types.String {
		return errors.New("expected string")
	}
	parts := strings.Split(string(v.String), "@")
	if len(parts) != 2 {
		return errors.New("value must be like 'local@domain.example.com'")
	}
	e.Local = parts[0]
	e.Domain = parts[1]
	return nil
}

const marshaledEmail = `
?SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SShaaarrkShaaaarrkShaaaaarrkShaaaaaarrk-SShkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShaaaarrkShaaaaarrkShaaaaaarrk-SShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaaaarrkShaaaaaarrk-SSharrkShaarrkShaaarrkShaaaaarrk-SShkSharrkShaaaaarrkShaaaaaarrk-SShkSharrkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-SShkShaarrkShaaarrkShaaaaarrkShaaaaaarrk-
`

func main() {
	var email Email
	err := watson.Unmarshal([]byte(marshaledEmail), &email)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Local: %s, Domain: %s\n", email.Local, email.Domain)
}
Output:

Types

type Decoder

type Decoder struct {
	// contains filtered or unexported fields
}

Decoder reads and decodes Watson values from a given io.Reader.

func NewDecoder

func NewDecoder(r io.Reader) *Decoder

NewDecoder creates a new Decoder that reads from r.

func (*Decoder) Decode

func (d *Decoder) Decode(v interface{}) error

Decode reads a Watson value from the underlying io.Reader and converts it into v.

func (*Decoder) SetStacksize

func (d *Decoder) SetStacksize(size int)

SetStackSize sets the stack size of underlying Watson VM.

See watson/pkg/vm for more details.

type Encoder

type Encoder struct {
	// contains filtered or unexported fields
}

Encoder writes Watson values to a given io.Writer.

func NewEncoder

func NewEncoder(w io.Writer) *Encoder

NewEncoder creates a new Encoder that writes to w.

func (*Encoder) Encode

func (e *Encoder) Encode(v interface{}) error

Encode writes the Watson encoding of v to the underlying io.Writer.

Directories

Path Synopsis
cmd
pkg
converter/cbor
Package cbor provides a way to convert CBOR into types.Value and vice versa.
Package cbor provides a way to convert CBOR into types.Value and vice versa.
converter/json
Package json provides a way to convert JSON into types.Value and vice versa.
Package json provides a way to convert JSON into types.Value and vice versa.
converter/msgpack
Package msgpack provides a way to convert MessagePack into types.Value and vice versa.
Package msgpack provides a way to convert MessagePack into types.Value and vice versa.
converter/yaml
Package yaml provides a way to convert YAML into types.Value and vice versa.
Package yaml provides a way to convert YAML into types.Value and vice versa.
dumper
Package dumper converts `types.Value`s into `types.Op`s.
Package dumper converts `types.Value`s into `types.Op`s.
lexer
Package lexer provides a way to convert a Watson Representation into a sequence of Watson's instructions and vice versa.
Package lexer provides a way to convert a Watson Representation into a sequence of Watson's instructions and vice versa.
prettifier
Package prettifier decorates Watson Representation by adding some meaningless `vm.Op`s.
Package prettifier decorates Watson Representation by adding some meaningless `vm.Op`s.
types
Package types proviedes types that can be represented as Watson.
Package types proviedes types that can be represented as Watson.
vm
Package vm contains a stack-based virtual machine that interprets Watson.
Package vm contains a stack-based virtual machine that interprets Watson.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL