WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
This commit is contained in:
Vendored
+95
@@ -0,0 +1,95 @@
|
||||
package anydoc
|
||||
|
||||
/*
|
||||
#include <stdint.h>
|
||||
#include "include/anydoc.h"
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import "fmt"
|
||||
|
||||
// Error codes mirroring the C ABI (ERR_*). Stable across versions.
|
||||
const (
|
||||
errOK = C.ERR_OK
|
||||
errUnsupported = C.ERR_UNSUPPORTED
|
||||
errMalformed = C.ERR_MALFORMED
|
||||
errEncrypted = C.ERR_ENCRYPTED
|
||||
errResourceLimit = C.ERR_RESOURCE_LIMIT
|
||||
errMissingPart = C.ERR_MISSING_PART
|
||||
errIO = C.ERR_IO
|
||||
errPDFNoModel = C.ERR_PDF_NO_MODEL
|
||||
errInvalidArg = C.ERR_INVALID_ARG
|
||||
errUnknownFormat = C.ERR_UNKNOWN_FORMAT
|
||||
)
|
||||
|
||||
// ConvertError is the typed error every conversion function returns. It
|
||||
// carries the same variant kind the Node and Python bindings expose
|
||||
// ("unsupported", "malformed", "encrypted", ...) plus the crate's
|
||||
// human-readable detail.
|
||||
type ConvertError struct {
|
||||
// Kind is the lowercase variant name, matching the Node and Python
|
||||
// bindings: "unsupported", "malformed", "encrypted", "resource_limit",
|
||||
// "missing_part", "io", "pdf_no_model". Go also reports
|
||||
// "unknown_format" for an invalid explicit Format.
|
||||
Kind string
|
||||
// Detail is the crate's Display output for the error.
|
||||
Detail string
|
||||
}
|
||||
|
||||
func (e *ConvertError) Error() string {
|
||||
if e == nil {
|
||||
return "<nil>"
|
||||
}
|
||||
if e.Detail == "" {
|
||||
return "anydoc: " + e.Kind
|
||||
}
|
||||
return "anydoc: " + e.Kind + ": " + e.Detail
|
||||
}
|
||||
|
||||
// convertError builds a ConvertError from an ABI error code, pulling the
|
||||
// detail message from the thread-local last-error slot.
|
||||
func convertError(code C.int) error {
|
||||
if code == errOK {
|
||||
return nil
|
||||
}
|
||||
kind := errorKind(code)
|
||||
detail := lastError()
|
||||
return &ConvertError{Kind: kind, Detail: detail}
|
||||
}
|
||||
|
||||
func errorKind(code C.int) string {
|
||||
switch code {
|
||||
case errUnsupported:
|
||||
return "unsupported"
|
||||
case errMalformed:
|
||||
return "malformed"
|
||||
case errEncrypted:
|
||||
return "encrypted"
|
||||
case errResourceLimit:
|
||||
return "resource_limit"
|
||||
case errMissingPart:
|
||||
return "missing_part"
|
||||
case errIO:
|
||||
return "io"
|
||||
case errPDFNoModel:
|
||||
return "pdf_no_model"
|
||||
case errInvalidArg:
|
||||
return "invalid_argument"
|
||||
case errUnknownFormat:
|
||||
return "unknown_format"
|
||||
default:
|
||||
return fmt.Sprintf("unknown_error(%d)", int(code))
|
||||
}
|
||||
}
|
||||
|
||||
// lastError returns the human-readable message the last ABI call stashed on
|
||||
// the current OS thread, or "" when there was none. The C side returns a
|
||||
// freshly allocated string the caller must free.
|
||||
func lastError() string {
|
||||
ptr := C.anydoc_last_error()
|
||||
if ptr == nil {
|
||||
return ""
|
||||
}
|
||||
defer C.anydoc_string_free(ptr)
|
||||
return cString(ptr)
|
||||
}
|
||||
Reference in New Issue
Block a user