diff --git a/src/main/kotlin/senior/joinu/candid/CandidCodeGenerator.kt b/src/main/kotlin/senior/joinu/candid/CandidCodeGenerator.kt new file mode 100644 index 0000000..6435a06 --- /dev/null +++ b/src/main/kotlin/senior/joinu/candid/CandidCodeGenerator.kt @@ -0,0 +1,24 @@ +package senior.joinu.candid + +import com.github.h0tk3y.betterParse.grammar.parseToEnd +import senior.joinu.candid.transpile.KtTranspiler +import java.nio.charset.Charset +import java.nio.charset.StandardCharsets +import java.nio.file.Path + +object CandidCodeGenerator { + fun generateFor( + didPath: Path, + genPath: Path, + genPackage: String, + didEncoding: Charset = StandardCharsets.UTF_8 + ) { + val did = didPath.toFile().readText(didEncoding) + + val program = IDLGrammar.parseToEnd(did) + val ktContext = KtTranspiler.transpile(program, genPackage, genPath.fileName.toString()) + val spec = ktContext.currentSpec.build() + + spec.writeTo(genPath) + } +} diff --git a/src/main/kotlin/senior/joinu/candid/IDLType.kt b/src/main/kotlin/senior/joinu/candid/IDLType.kt index 0feb34e..7bb1716 100644 --- a/src/main/kotlin/senior/joinu/candid/IDLType.kt +++ b/src/main/kotlin/senior/joinu/candid/IDLType.kt @@ -3,7 +3,6 @@ package senior.joinu.candid import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.asTypeName import senior.joinu.candid.serialize.getTypeSerForType -import senior.joinu.leb128.Leb128 import java.nio.ByteBuffer class TypeTable( diff --git a/src/main/kotlin/senior/joinu/leb128/Leb128.kt b/src/main/kotlin/senior/joinu/candid/Leb128.kt similarity index 97% rename from src/main/kotlin/senior/joinu/leb128/Leb128.kt rename to src/main/kotlin/senior/joinu/candid/Leb128.kt index 6953544..8aff013 100644 --- a/src/main/kotlin/senior/joinu/leb128/Leb128.kt +++ b/src/main/kotlin/senior/joinu/candid/Leb128.kt @@ -1,9 +1,6 @@ -package senior.joinu.leb128 +package senior.joinu.candid -import senior.joinu.candid.reverseOrder -import senior.joinu.candid.toBytesLE -import senior.joinu.candid.toUBytesLE import java.math.BigInteger import java.nio.ByteBuffer import kotlin.experimental.and diff --git a/src/main/kotlin/senior/joinu/candid/serialize/TypeSers.kt b/src/main/kotlin/senior/joinu/candid/serialize/TypeSers.kt index 0dab014..b99a5b5 100644 --- a/src/main/kotlin/senior/joinu/candid/serialize/TypeSers.kt +++ b/src/main/kotlin/senior/joinu/candid/serialize/TypeSers.kt @@ -2,7 +2,7 @@ package senior.joinu.candid.serialize import com.squareup.kotlinpoet.CodeBlock import senior.joinu.candid.* -import senior.joinu.leb128.Leb128 +import senior.joinu.candid.Leb128 import java.nio.ByteBuffer import java.nio.charset.StandardCharsets diff --git a/src/main/kotlin/senior/joinu/candid/serialize/ValueSers.kt b/src/main/kotlin/senior/joinu/candid/serialize/ValueSers.kt index fcef4dd..5a40ec1 100644 --- a/src/main/kotlin/senior/joinu/candid/serialize/ValueSers.kt +++ b/src/main/kotlin/senior/joinu/candid/serialize/ValueSers.kt @@ -2,8 +2,8 @@ package senior.joinu.candid.serialize import com.squareup.kotlinpoet.CodeBlock import senior.joinu.candid.* -import senior.joinu.leb128.Leb128 -import senior.joinu.leb128.Leb128BI +import senior.joinu.candid.Leb128 +import senior.joinu.candid.Leb128BI import java.math.BigInteger import java.nio.ByteBuffer import java.nio.charset.StandardCharsets diff --git a/src/main/kotlin/senior/joinu/candid/transpile/Utils.kt b/src/main/kotlin/senior/joinu/candid/transpile/Utils.kt index 73b8d07..4a43b1c 100644 --- a/src/main/kotlin/senior/joinu/candid/transpile/Utils.kt +++ b/src/main/kotlin/senior/joinu/candid/transpile/Utils.kt @@ -4,7 +4,7 @@ import com.squareup.kotlinpoet.* import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy import senior.joinu.candid.* import senior.joinu.candid.serialize.* -import senior.joinu.leb128.Leb128 +import senior.joinu.candid.Leb128 import java.nio.ByteBuffer import java.nio.ByteOrder import java.util.* diff --git a/src/test/kotlin/senior/joinu/candid/parser/Test.kt b/src/test/kotlin/senior/joinu/candid/parser/Test.kt index eb63d64..9e37a65 100644 --- a/src/test/kotlin/senior/joinu/candid/parser/Test.kt +++ b/src/test/kotlin/senior/joinu/candid/parser/Test.kt @@ -4,18 +4,16 @@ import java.math.BigInteger import java.nio.ByteBuffer import java.nio.ByteOrder import java.util.Base64 -import kotlin.Boolean import kotlin.ByteArray import kotlin.Int import kotlin.String import kotlin.collections.List import senior.joinu.candid.CanisterId import senior.joinu.candid.EdDSAKeyPair -import senior.joinu.candid.Null import senior.joinu.candid.SimpleIDLFunc import senior.joinu.candid.SimpleIDLService import senior.joinu.candid.serialize.* -import senior.joinu.leb128.Leb128 +import senior.joinu.candid.Leb128 data class Value( val i: BigInteger, @@ -49,17 +47,17 @@ sealed class Sign { object SignValueSer : ValueSer { override fun calcSizeBytes(value: Sign): Int = when (value) { - is Sign.Plus -> senior.joinu.leb128.Leb128.sizeUnsigned(0) - is Sign.Minus -> senior.joinu.leb128.Leb128.sizeUnsigned(1) + is Sign.Plus -> Leb128.sizeUnsigned(0) + is Sign.Minus -> Leb128.sizeUnsigned(1) } override fun ser(buf: ByteBuffer, value: Sign) { when (value) { is Sign.Plus -> { - senior.joinu.leb128.Leb128.writeUnsigned(buf, 0) + Leb128.writeUnsigned(buf, 0) } is Sign.Minus -> { - senior.joinu.leb128.Leb128.writeUnsigned(buf, 1) + Leb128.writeUnsigned(buf, 1) } } }