// This file is @generated by prost-build. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CreateCustomExchangeRatesTableRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, } #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] pub struct CreateCustomExchangeRatesTableResponse { #[prost(int64, tag = "1")] pub table_definition_id: i64, #[prost(bool, tag = "2")] pub created: bool, } /// Defines the input for creating a new table definition. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct PostTableDefinitionRequest { /// Table name to create inside the target profile. /// Must be lowercase, alphanumeric with underscores, /// start with a letter, and be \<= 63 chars. /// Forbidden names include the system columns and tables owned by dedicated /// server operations, such as "custom_exchange_rates". The "\_id" suffix is /// allowed. #[prost(string, tag = "1")] pub table_name: ::prost::alloc::string::String, /// The table's columns, including its links and stored linked projections. /// A projection uses field_type FROM(link_column.source_column); its physical /// type and money metadata are inferred from the linked source column. #[prost(message, repeated, tag = "3")] pub columns: ::prost::alloc::vec::Vec, /// Column names to index, matching names declared above. System columns /// ("id", "deleted", "created_at", "row_revision") already have indexes, and /// a LINK column is indexed when it is created. Requests naming either are /// rejected. #[prost(string, repeated, tag = "4")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// Name of profile (Postgres schema) where the table will be created. /// Same naming rules as table_name; cannot collide with reserved schemas /// like "public", "information_schema", or ones starting with "pg\_". #[prost(string, tag = "5")] pub profile_name: ::prost::alloc::string::String, /// Columns whose values identify a row to users in pickers, in the order /// they are shown. Each must name one of the user-defined columns above. /// Empty means the row is identified by its id alone. #[prost(string, repeated, tag = "7")] pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// ISO-4217 currency the profile keeps its accounting in. A profile is one /// accounting entity and keeps one set of books, so this is required only when /// the request creates the profile, and is ignored afterwards. It is unrelated /// to individual MONEY-column currencies: tables may hold money in any currency, and amounts convert /// to this one when they reach the ledger. #[prost(string, tag = "8")] pub accounting_currency: ::prost::alloc::string::String, /// Initial compiled direct-rate provider. It is enabled for each initial /// foreign currency below; more provider/currency bindings may be appended later. #[prost(string, tag = "11")] pub rate_source_id: ::prost::alloc::string::String, /// Append-only foreign currencies initially enabled for this profile. #[prost(string, repeated, tag = "12")] pub foreign_currencies: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// When true, the table is stored once in the global physical schema and is /// visible from every profile. profile_name and accounting_currency are ignored. #[prost(bool, tag = "9")] pub global: bool, /// Names for the columns a definition row generates, in place of the ones the /// backend would give them. See GeneratedColumnAlias. #[prost(message, repeated, tag = "10")] pub generated_aliases: ::prost::alloc::vec::Vec, } /// Renames one column a definition row generates, at the moment it is created. /// /// A generated column cannot be named in the column list -- the definition row /// is required to be named after its own type, and what it expands into is the /// backend's to decide. The name is only ever a display name over a physical /// column, though, so it is free to be anything: this is where that choice is /// made, instead of a SetColumnPresentation call afterwards. /// /// ACCOUNTING, PHONE and IBAN generated columns may be renamed: their /// relationships are recorded by physical column, so the rest of the system can /// find them without knowing their display names. ACCOUNTING_TRANSFER connectors /// are the exception and are refused here exactly as SetColumnPresentation refuses /// them. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GeneratedColumnAlias { /// The name the backend would otherwise give the column: one of ACCOUNTING's /// "name", "tax_point_date", "debit", "credit" or "account", or a PHONE or /// IBAN companion such as "work_phone_ext". Must name a column the request /// really generates -- an alias for anything else is rejected rather than /// ignored, so a typo cannot pass silently. #[prost(string, tag = "1")] pub generated_name: ::prost::alloc::string::String, /// What the column should be called instead. Same rules as any column name. #[prost(string, tag = "2")] pub alias: ::prost::alloc::string::String, } /// Defines the input for explicitly creating tables backed by one invoice /// template. typst_source must contain exactly one field declaration: /// /// \#let komp_ac_fields = ( /// "sidlo.nazov", /// "people\[\].name", /// "people\[\].requested_quantity", /// ) /// /// A path matching an existing profile table and column becomes a reference to /// that table. Otherwise its final segment becomes a local TEXT column for an /// administrator to refine later. Every \[\] creates a child table with a required /// FK to its immediate generated parent. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CreateInvoiceTemplateTableRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] pub table_name: ::prost::alloc::string::String, #[prost(string, tag = "3")] pub typst_source: ::prost::alloc::string::String, #[prost(string, repeated, tag = "5")] pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// One physical dynamic table created for an invoice template scope. The root /// has an empty collection_path and parent_table_name. Each \[\] scope names its /// collection and the generated table that owns those repeated rows. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GeneratedInvoiceTemplateTable { #[prost(string, tag = "1")] pub table_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] pub collection_path: ::prost::alloc::string::String, #[prost(string, tag = "3")] pub parent_table_name: ::prost::alloc::string::String, #[prost(string, tag = "4")] pub sql: ::prost::alloc::string::String, } /// Reports the complete table bundle created from one invoice template. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct CreateInvoiceTemplateTableResponse { #[prost(bool, tag = "1")] pub success: bool, #[prost(message, repeated, tag = "2")] pub tables: ::prost::alloc::vec::Vec, } /// Defines append-only column additions for an existing table. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct AddTableColumnsRequest { /// Existing profile/schema name. #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, /// Existing table name in the profile. #[prost(string, tag = "2")] pub table_name: ::prost::alloc::string::String, /// New user-defined columns only. Existing columns cannot be changed here. /// Stored linked projections use field_type FROM(link_column.source_column). #[prost(message, repeated, tag = "3")] pub columns: ::prost::alloc::vec::Vec, /// Optional indexes for the new columns only. #[prost(string, repeated, tag = "4")] pub indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, /// Names for the columns the appended definition rows generate, exactly as on /// PostTableDefinitionRequest. #[prost(message, repeated, tag = "5")] pub generated_aliases: ::prost::alloc::vec::Vec, } /// One atomic structural edit to an existing empty table. /// /// Removals use stable column IDs rather than aliases. Generated companion /// columns must be removed together with their generating column. New columns /// follow the same contract as AddTableColumns. #[derive(Clone, PartialEq, ::prost::Message)] pub struct PutTableDefinitionRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] pub table_name: ::prost::alloc::string::String, #[prost(int64, repeated, tag = "3")] pub remove_column_ids: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "4")] pub add_columns: ::prost::alloc::vec::Vec, #[prost(string, repeated, tag = "5")] pub add_indexes: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(message, repeated, tag = "6")] pub generated_aliases: ::prost::alloc::vec::Vec, /// Revision returned by GetProfileDetails. Prevents a stale editor from /// overwriting a newer structural or presentation change. #[prost(int64, tag = "7")] pub expected_row_version: i64, /// New physical/catalog name. Empty, or equal to table_name, keeps the /// current name for backwards-compatible callers. #[prost(string, tag = "8")] pub new_table_name: ::prost::alloc::string::String, } #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct PutTableDefinitionResponse { #[prost(bool, tag = "1")] pub success: bool, #[prost(string, tag = "2")] pub sql: ::prost::alloc::string::String, #[prost(int64, tag = "3")] pub row_version: i64, #[prost(int64, repeated, tag = "4")] pub removed_column_ids: ::prost::alloc::vec::Vec, } /// Describes one user-defined column for a table. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnDefinition { /// Must be lowercase, start with a letter, and use only lowercase letters, /// digits and underscores. /// /// Cannot be "id", "deleted", "created_at" or "row_revision": those are /// system columns, and a data request names system and user columns in one /// namespace. Any other name is free, including one ending in "\_id" -- no /// column name is derived from a table name, so nothing collides. #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// Logical column type. Supported values (case-insensitive): /// TEXT /// BOOLEAN /// INSTANT (local input resolved in the authenticated user's timezone /// and displayed in the viewer timezone) /// USER_DATETIME (local input resolved in the user's timezone) /// RAW_DATETIME (timezone-free civil datetime) /// PHONE (international or national phone number; generates extension/type/country/calling-code companions) /// TIME (timezone-free time of day) /// MONEY (= unconstrained NUMERIC; currency is declared below) /// ACCOUNTING (creates schema-managed name, account, debit, and credit fields; /// account always selects a row from the profile's managed ledger_accounts table; /// name is limited to 10 characters and one stored row contributes /// one line to the profile journal) /// ACCOUNTING_TRANSFER (creates automatic source-period/account/book/ /// denomination fields and writable target equivalents; one /// table may contain only one accounting transfer definition) /// INT /// BIGINT /// DATE /// DURATION /// PERIOD /// LINK(table) → BIGINT referencing that table in the same profile, indexed /// automatically. A table may hold several links to the same /// target as long as the columns are named differently. /// FROM(link.source) → stored, read-only copy of an atomic column reached /// through another column in this definition whose type is /// LINK(...). SQL type and money metadata are inferred. #[prost(string, tag = "2")] pub field_type: ::prost::alloc::string::String, /// MONEY rounding applied before a value is stored. #[prost(enumeration = "MoneyRounding", tag = "3")] pub rounding: i32, /// When true, this numeric column is server-owned and projected from the /// profile quantity ledger. #[prost(bool, tag = "4")] pub quantity_ledger: bool, /// Canonical uppercase ISO-4217 currency code. Required for MONEY and forbidden /// for every other field type. #[prost(string, tag = "5")] pub currency: ::prost::alloc::string::String, /// When true, the server rejects omitted or explicitly null values. #[prost(bool, tag = "6")] pub required: bool, } /// Response after table creation (success + DDL preview). #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct TableDefinitionResponse { /// True if all DB changes and metadata inserts succeeded. #[prost(bool, tag = "1")] pub success: bool, /// The actual SQL executed: CREATE TABLE + CREATE INDEX statements. #[prost(string, tag = "2")] pub sql: ::prost::alloc::string::String, } /// Describes the tree of all profiles and their tables. #[derive(Clone, PartialEq, ::prost::Message)] pub struct ProfileTreeResponse { /// All profiles in the system. #[prost(message, repeated, tag = "1")] pub profiles: ::prost::alloc::vec::Vec, /// The profile holding the tables every profile shares. Callers browse this /// one when the user has not chosen a profile, so the name is reported here /// rather than being known in advance. #[prost(string, tag = "2")] pub shared_profile_name: ::prost::alloc::string::String, } /// Nested message and enum types in `ProfileTreeResponse`. pub mod profile_tree_response { /// One link: the table it points at, and the column carrying it. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct Dependency { /// Table being referenced. #[prost(string, tag = "1")] pub table_name: ::prost::alloc::string::String, /// Column holding the reference, named by whoever declared the link. This /// is what identifies the link, since a table may point at one target /// several times. #[prost(string, tag = "2")] pub column_name: ::prost::alloc::string::String, } /// Table entry in a profile. #[derive(Clone, PartialEq, ::prost::Message)] pub struct Table { /// Internal ID from table_definitions.id (metadata record). #[prost(int64, tag = "1")] pub id: i64, /// Table name within the profile (schema). #[prost(string, tag = "2")] pub name: ::prost::alloc::string::String, /// Links this table declares. One entry per link, so a table that names the /// same target twice appears twice. #[prost(message, repeated, tag = "3")] pub depends_on: ::prost::alloc::vec::Vec, /// Columns whose values make up the human-readable row label, in order. #[prost(string, repeated, tag = "4")] pub row_display_columns: ::prost::alloc::vec::Vec< ::prost::alloc::string::String, >, /// "dynamic" for user-defined tables, "system" for backend-managed tables. #[prost(string, tag = "5")] pub table_kind: ::prost::alloc::string::String, /// True when this table is shared by every profile. #[prost(bool, tag = "6")] pub global: bool, /// Profile (schema) the table is actually stored in. A global table is /// listed under every profile it is visible from, so this names the one it /// belongs to rather than the one it was reached through, and callers can /// use it as the table's identity without deciding anything themselves. #[prost(string, tag = "7")] pub profile_name: ::prost::alloc::string::String, } /// Profile (schema) entry. #[derive(Clone, PartialEq, ::prost::Message)] pub struct Profile { /// Name of the schema/profile (as stored in `schemas.name`). #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// All tables in that schema and their dependencies. #[prost(message, repeated, tag = "2")] pub tables: ::prost::alloc::vec::Vec, } } #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetTableCatalogRequest { /// Selected profile. Omit this field to request the global-only scope. #[prost(string, optional, tag = "1")] pub profile_name: ::core::option::Option<::prost::alloc::string::String>, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTableCatalogResponse { #[prost(message, repeated, tag = "1")] pub tables: ::prost::alloc::vec::Vec, } /// Request to fetch all tables, columns and scripts for a profile. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetProfileDetailsRequest { /// Profile (schema) name to fetch details for. #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, } /// Response with all tables, columns and scripts for a profile. #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetProfileDetailsResponse { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, #[prost(message, repeated, tag = "2")] pub tables: ::prost::alloc::vec::Vec, } /// Request to copy one full profile into a new profile. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CopyProfileRequest { #[prost(string, tag = "1")] pub source_profile_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] pub target_profile_name: ::prost::alloc::string::String, #[prost(string, repeated, tag = "3")] pub table_names: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, } /// Response after copying a profile. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CopyProfileResponse { #[prost(bool, tag = "1")] pub success: bool, #[prost(string, tag = "2")] pub message: ::prost::alloc::string::String, #[prost(int32, tag = "3")] pub tables_copied: i32, #[prost(int32, tag = "4")] pub scripts_copied: i32, } /// Request to fetch recorded column alias rename history for one profile. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GetColumnAliasRenameHistoryRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, /// Filter. When omitted, returns all tables in the profile. #[prost(int64, optional, tag = "2")] pub table_definition_id: ::core::option::Option, } /// One recorded column alias rename. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnAliasRenameHistoryEntry { #[prost(int64, tag = "1")] pub id: i64, #[prost(string, tag = "2")] pub profile_name: ::prost::alloc::string::String, #[prost(int64, tag = "3")] pub table_definition_id: i64, #[prost(string, tag = "4")] pub table_name: ::prost::alloc::string::String, #[prost(string, tag = "5")] pub old_column_name: ::prost::alloc::string::String, #[prost(string, tag = "6")] pub new_column_name: ::prost::alloc::string::String, #[prost(string, tag = "7")] pub created_at: ::prost::alloc::string::String, } /// Response with stored column alias rename history rows. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct GetColumnAliasRenameHistoryResponse { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, #[prost(message, repeated, tag = "2")] pub entries: ::prost::alloc::vec::Vec, } /// Describes a table with its columns and associated scripts. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TableDetail { #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, #[prost(int64, tag = "2")] pub id: i64, #[prost(message, repeated, tag = "3")] pub columns: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "4")] pub scripts: ::prost::alloc::vec::Vec, #[prost(string, repeated, tag = "6")] pub row_display_columns: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, #[prost(map = "string, message", tag = "7")] pub column_behaviors: ::std::collections::HashMap< ::prost::alloc::string::String, ColumnBehavior, >, #[prost(string, tag = "8")] pub table_kind: ::prost::alloc::string::String, #[prost(bool, tag = "9")] pub global: bool, /// Revision of this table definition for optimistic concurrency control. #[prost(int64, tag = "10")] pub row_version: i64, /// Profile (schema) the table is actually stored in, which is not the /// requested profile when a global table is being listed. See /// ProfileTreeResponse.Table.profile_name. #[prost(string, tag = "11")] pub profile_name: ::prost::alloc::string::String, /// True when the physical table contains at least one row, including a /// soft-deleted row. Populated tables are append-only: PutTableDefinition is /// no longer available, while AddTableColumns remains available. #[prost(bool, tag = "12")] pub has_data: bool, } /// Server-owned behavior for one logical column returned in table details. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnBehavior { /// True when the server created the column as a companion of another column. #[prost(bool, tag = "1")] pub generated: bool, /// True when clients must display but never submit edits for the column. #[prost(bool, tag = "2")] pub read_only: bool, /// Logical source column name, empty for ordinary user-defined columns. #[prost(string, tag = "3")] pub generated_from: ::prost::alloc::string::String, /// True when clients may offer this column in an alias rename picker. #[prost(bool, tag = "4")] pub renameable: bool, /// Stable public identity used when updating this column's presentation. #[prost(int64, tag = "5")] pub column_id: i64, } /// A script that targets a specific column in a table. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ScriptInfo { #[prost(int64, tag = "1")] pub script_id: i64, #[prost(string, tag = "2")] pub target_column: ::prost::alloc::string::String, #[prost(string, tag = "3")] pub target_column_type: ::prost::alloc::string::String, #[prost(string, tag = "4")] pub script: ::prost::alloc::string::String, #[prost(string, tag = "5")] pub description: ::prost::alloc::string::String, } /// One column's desired public presentation. Its position in the containing /// repeated field is its presentation order. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct ColumnPresentation { /// Stable public identity of the table_definition_columns row. #[prost(int64, tag = "1")] pub column_id: i64, #[prost(string, tag = "2")] pub alias: ::prost::alloc::string::String, } /// Atomically replaces every user-visible column alias and their order. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SetColumnPresentationRequest { #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, #[prost(string, tag = "2")] pub table_name: ::prost::alloc::string::String, #[prost(message, repeated, tag = "3")] pub columns: ::prost::alloc::vec::Vec, /// Row version returned by GetProfileDetails when this presentation was read. #[prost(int64, tag = "4")] pub expected_row_version: i64, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, ::prost::Message)] pub struct SetColumnPresentationResponse { #[prost(bool, tag = "1")] pub success: bool, #[prost(string, tag = "2")] pub message: ::prost::alloc::string::String, #[prost(message, repeated, tag = "3")] pub columns: ::prost::alloc::vec::Vec, /// New row version after the update. #[prost(int64, tag = "4")] pub row_version: i64, } /// Request to delete one table definition entirely. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableRequest { /// Profile (schema) name owning the table (must exist). #[prost(string, tag = "1")] pub profile_name: ::prost::alloc::string::String, /// Table to drop (must exist in the profile). /// Executes DROP TABLE "profile"."table" CASCADE and then removes metadata. #[prost(string, tag = "2")] pub table_name: ::prost::alloc::string::String, } /// Response after table deletion. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct DeleteTableResponse { /// True if table and metadata were successfully deleted in one transaction. #[prost(bool, tag = "1")] pub success: bool, /// Human-readable summary of what was removed. #[prost(string, tag = "2")] pub message: ::prost::alloc::string::String, } /// Response describing the whole column-type vocabulary. /// /// This is the authority a client builds its column-type picker from: every rule /// a client would otherwise hardcode about what a type means is a field here. The /// list covers types clients may NOT declare as well (see `declarable`), so that /// the same call also explains the types GetProfileDetails reports back for /// server-generated companion columns. #[derive(Clone, PartialEq, ::prost::Message)] pub struct ListColumnTypesResponse { /// Every column type, declarable or not, ordered by name. #[prost(message, repeated, tag = "1")] pub column_types: ::prost::alloc::vec::Vec, } /// Nested message and enum types in `ListColumnTypesResponse`. pub mod list_column_types_response { /// One column type and everything a client needs to know to offer it. #[derive(Clone, PartialEq, ::prost::Message)] pub struct ColumnType { /// Logical column type (e.g. "money", "instant"). Passed to the server as /// ColumnDefinition.field_type — see `spelling`, which is what says whether /// this name is the whole spelling. #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// Underlying PostgreSQL type the logical type maps to (e.g. "NUMERIC"). /// Empty when `compound` is true. #[prost(string, tag = "2")] pub sql_type: ::prost::alloc::string::String, /// False for types the server generates on its own and rejects when a client /// declares them: the phone and IBAN companions, and the accounting-transfer /// connectors. A column-type picker must offer only declarable types. #[prost(bool, tag = "3")] pub declarable: bool, /// True when the type is a definition row rather than a column: it expands /// into several schema-managed companion columns and no column of this name /// survives. A compound type can therefore never be indexed, never be a row /// display column, and has no single sql_type of its own. #[prost(bool, tag = "4")] pub compound: bool, /// Whether `name` is the whole spelling or takes arguments. #[prost(enumeration = "super::ColumnTypeSpelling", tag = "5")] pub spelling: i32, /// Whether ColumnDefinition.currency is required. Currency is rejected on /// every type where this is false. #[prost(bool, tag = "6")] pub requires_currency: bool, /// True when the type may only be chosen while the table is being created. /// AddTableColumns rejects these, because they bring schema-managed columns /// that cannot be bolted onto a table that already exists. #[prost(bool, tag = "7")] pub creation_only: bool, /// Whether ColumnDefinition.quantity_ledger may be set on this type. #[prost(bool, tag = "8")] pub allows_quantity_ledger: bool, /// Optional name grouping several types a client offers behind one choice — /// "temporal" for the date and time types, "gtin" for the GTIN lengths. /// Empty when the type stands on its own. #[prost(string, tag = "9")] pub group: ::prost::alloc::string::String, /// What this type expands into, in the order the server creates the /// columns. Populated for compound types only, where the generated names /// are fixed; empty for every other type, including the ones whose /// companions are named after the declared column (phone, iban). /// /// A picker offering a compound type shows these, so choosing it is not a /// blind choice. The columns stay the server's to create — none of them may /// be declared. #[prost(message, repeated, tag = "10")] pub generated_columns: ::prost::alloc::vec::Vec, } /// Nested message and enum types in `ColumnType`. pub mod column_type { /// One column a compound type expands into. #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct GeneratedColumn { /// Name the server gives the column. Fixed, and reserved: a table /// declaring a compound type may not also declare a column of this name. #[prost(string, tag = "1")] pub name: ::prost::alloc::string::String, /// The generated column's own logical type, as this same catalog /// describes it. #[prost(string, tag = "2")] pub field_type: ::prost::alloc::string::String, /// Whether the generated column carries the currency and rounding /// declared on the definition row. #[prost(bool, tag = "3")] pub inherits_currency: bool, } } } #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum MoneyRounding { None = 0, HalfUp = 1, } impl MoneyRounding { /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { Self::None => "MONEY_ROUNDING_NONE", Self::HalfUp => "MONEY_ROUNDING_HALF_UP", } } /// Creates an enum from field names used in the ProtoBuf definition. pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "MONEY_ROUNDING_NONE" => Some(Self::None), "MONEY_ROUNDING_HALF_UP" => Some(Self::HalfUp), _ => None, } } } /// How a column type is spelled in ColumnDefinition.field_type. #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum ColumnTypeSpelling { /// The name is the whole spelling: "text", "money", "gtin_13". Bare = 0, /// The name takes the name of another table in the same profile: /// "link(adresar)". The column holds that table's id, and the server creates /// the foreign key and its index. A picker offers the profile's other tables /// as the argument. Link = 2, } impl ColumnTypeSpelling { /// String value of the enum field names used in the ProtoBuf definition. /// /// The values are not transformed in any way and thus are considered stable /// (if the ProtoBuf definition does not change) and safe for programmatic use. pub fn as_str_name(&self) -> &'static str { match self { Self::Bare => "COLUMN_TYPE_SPELLING_BARE", Self::Link => "COLUMN_TYPE_SPELLING_LINK", } } /// Creates an enum from field names used in the ProtoBuf definition. pub fn from_str_name(value: &str) -> ::core::option::Option { match value { "COLUMN_TYPE_SPELLING_BARE" => Some(Self::Bare), "COLUMN_TYPE_SPELLING_LINK" => Some(Self::Link), _ => None, } } } /// Generated client implementations. pub mod table_definition_client { #![allow( unused_variables, dead_code, missing_docs, clippy::wildcard_imports, clippy::let_unit_value, )] use tonic::codegen::*; use tonic::codegen::http::Uri; /// The TableDefinition service manages the entire lifecycle of user-defined /// tables (stored as both metadata and physical PostgreSQL tables) inside /// logical "profiles" (schemas). Each table has stored structure, links, and /// validation rules. #[derive(Debug, Clone)] pub struct TableDefinitionClient { inner: tonic::client::Grpc, } impl TableDefinitionClient { /// Attempt to create a new client by connecting to a given endpoint. pub async fn connect(dst: D) -> Result where D: TryInto, D::Error: Into, { let conn = tonic::transport::Endpoint::new(dst)?.connect().await?; Ok(Self::new(conn)) } } impl TableDefinitionClient where T: tonic::client::GrpcService, T::Error: Into, T::ResponseBody: Body + std::marker::Send + 'static, ::Error: Into + std::marker::Send, { pub fn new(inner: T) -> Self { let inner = tonic::client::Grpc::new(inner); Self { inner } } pub fn with_origin(inner: T, origin: Uri) -> Self { let inner = tonic::client::Grpc::with_origin(inner, origin); Self { inner } } pub fn with_interceptor( inner: T, interceptor: F, ) -> TableDefinitionClient> where F: tonic::service::Interceptor, T::ResponseBody: Default, T: tonic::codegen::Service< http::Request, Response = http::Response< >::ResponseBody, >, >, , >>::Error: Into + std::marker::Send + std::marker::Sync, { TableDefinitionClient::new(InterceptedService::new(inner, interceptor)) } /// Compress requests with the given encoding. /// /// This requires the server to support it otherwise it might respond with an /// error. #[must_use] pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { self.inner = self.inner.send_compressed(encoding); self } /// Enable decompressing responses. #[must_use] pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { self.inner = self.inner.accept_compressed(encoding); self } /// Limits the maximum size of a decoded message. /// /// Default: `4MB` #[must_use] pub fn max_decoding_message_size(mut self, limit: usize) -> Self { self.inner = self.inner.max_decoding_message_size(limit); self } /// Limits the maximum size of an encoded message. /// /// Default: `usize::MAX` #[must_use] pub fn max_encoding_message_size(mut self, limit: usize) -> Self { self.inner = self.inner.max_encoding_message_size(limit); self } /// Creates a new table (and schema if missing) with system columns, /// linked-table foreign keys, user-defined columns, and optional indexes. /// Also inserts metadata and default validation rules. Entirely transactional. pub async fn post_table_definition( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/PostTableDefinition", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "PostTableDefinition", ), ); self.inner.unary(req, path, codec).await } /// Explicitly creates the optional administrator-managed exchange-rate table /// in an existing profile. The server owns its core shape and constraints. pub async fn create_custom_exchange_rates_table( &mut self, request: impl tonic::IntoRequest< super::CreateCustomExchangeRatesTableRequest, >, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/CreateCustomExchangeRatesTable", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "CreateCustomExchangeRatesTable", ), ); self.inner.unary(req, path, codec).await } /// Creates a regular user-table bundle from the restricted komp_ac_fields /// contract embedded in a Typst invoice template. This is invoked explicitly /// by the user; templates do not provision tables merely by existing. pub async fn create_invoice_template_table( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/CreateInvoiceTemplateTable", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "CreateInvoiceTemplateTable", ), ); self.inner.unary(req, path, codec).await } /// Appends new user-defined columns to an existing table. /// Existing columns, links, and table logic are never changed by this call. pub async fn add_table_columns( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/AddTableColumns", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "AddTableColumns", ), ); self.inner.unary(req, path, codec).await } /// Atomically removes selected columns and appends new columns to an empty /// dynamic table. Column identities come from GetProfileDetails. The call is /// rejected after any row, including a soft-deleted row, has been stored. pub async fn put_table_definition( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/PutTableDefinition", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "PutTableDefinition", ), ); self.inner.unary(req, path, codec).await } /// Lists all profiles (schemas) and their tables with declared dependencies. /// This provides a tree-like overview of table relationships. pub async fn get_profile_tree( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetProfileTree", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "GetProfileTree", ), ); self.inner.unary(req, path, codec).await } /// Lists the tables visible in one data-entry scope. When profile_name is /// absent, only global tables are returned. pub async fn get_table_catalog( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetTableCatalog", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "GetTableCatalog", ), ); self.inner.unary(req, path, codec).await } /// Lists every column type a table may declare, along with the SQL type it /// maps to. Pure data retrieval - no business logic. pub async fn list_column_types( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/ListColumnTypes", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "ListColumnTypes", ), ); self.inner.unary(req, path, codec).await } /// Fetches all tables with their columns and scripts for a specific profile. /// Pure data retrieval - no business logic. pub async fn get_profile_details( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetProfileDetails", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "GetProfileDetails", ), ); self.inner.unary(req, path, codec).await } /// Copies one complete profile into a new profile without copying table data. pub async fn copy_profile( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/CopyProfile", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "CopyProfile", ), ); self.inner.unary(req, path, codec).await } /// Returns the stored rename history for column aliases in one profile. pub async fn get_column_alias_rename_history( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/GetColumnAliasRenameHistory", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "GetColumnAliasRenameHistory", ), ); self.inner.unary(req, path, codec).await } /// Atomically replaces the aliases and presentation order of a table's columns. /// Physical column names and identities remain unchanged. pub async fn set_column_presentation( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/SetColumnPresentation", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "SetColumnPresentation", ), ); self.inner.unary(req, path, codec).await } /// Drops a table and its metadata, then deletes the profile if it becomes empty. pub async fn delete_table( &mut self, request: impl tonic::IntoRequest, ) -> std::result::Result< tonic::Response, tonic::Status, > { self.inner .ready() .await .map_err(|e| { tonic::Status::unknown( format!("Service was not ready: {}", e.into()), ) })?; let codec = tonic_prost::ProstCodec::default(); let path = http::uri::PathAndQuery::from_static( "/komp_ac.table_definition.TableDefinition/DeleteTable", ); let mut req = request.into_request(); req.extensions_mut() .insert( GrpcMethod::new( "komp_ac.table_definition.TableDefinition", "DeleteTable", ), ); self.inner.unary(req, path, codec).await } } } /// Generated server implementations. pub mod table_definition_server { #![allow( unused_variables, dead_code, missing_docs, clippy::wildcard_imports, clippy::let_unit_value, )] use tonic::codegen::*; /// Generated trait containing gRPC methods that should be implemented for use with TableDefinitionServer. #[async_trait] pub trait TableDefinition: std::marker::Send + std::marker::Sync + 'static { /// Creates a new table (and schema if missing) with system columns, /// linked-table foreign keys, user-defined columns, and optional indexes. /// Also inserts metadata and default validation rules. Entirely transactional. async fn post_table_definition( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Explicitly creates the optional administrator-managed exchange-rate table /// in an existing profile. The server owns its core shape and constraints. async fn create_custom_exchange_rates_table( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Creates a regular user-table bundle from the restricted komp_ac_fields /// contract embedded in a Typst invoice template. This is invoked explicitly /// by the user; templates do not provision tables merely by existing. async fn create_invoice_template_table( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Appends new user-defined columns to an existing table. /// Existing columns, links, and table logic are never changed by this call. async fn add_table_columns( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Atomically removes selected columns and appends new columns to an empty /// dynamic table. Column identities come from GetProfileDetails. The call is /// rejected after any row, including a soft-deleted row, has been stored. async fn put_table_definition( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Lists all profiles (schemas) and their tables with declared dependencies. /// This provides a tree-like overview of table relationships. async fn get_profile_tree( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Lists the tables visible in one data-entry scope. When profile_name is /// absent, only global tables are returned. async fn get_table_catalog( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Lists every column type a table may declare, along with the SQL type it /// maps to. Pure data retrieval - no business logic. async fn list_column_types( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Fetches all tables with their columns and scripts for a specific profile. /// Pure data retrieval - no business logic. async fn get_profile_details( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Copies one complete profile into a new profile without copying table data. async fn copy_profile( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Returns the stored rename history for column aliases in one profile. async fn get_column_alias_rename_history( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Atomically replaces the aliases and presentation order of a table's columns. /// Physical column names and identities remain unchanged. async fn set_column_presentation( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; /// Drops a table and its metadata, then deletes the profile if it becomes empty. async fn delete_table( &self, request: tonic::Request, ) -> std::result::Result< tonic::Response, tonic::Status, >; } /// The TableDefinition service manages the entire lifecycle of user-defined /// tables (stored as both metadata and physical PostgreSQL tables) inside /// logical "profiles" (schemas). Each table has stored structure, links, and /// validation rules. #[derive(Debug)] pub struct TableDefinitionServer { inner: Arc, accept_compression_encodings: EnabledCompressionEncodings, send_compression_encodings: EnabledCompressionEncodings, max_decoding_message_size: Option, max_encoding_message_size: Option, } impl TableDefinitionServer { pub fn new(inner: T) -> Self { Self::from_arc(Arc::new(inner)) } pub fn from_arc(inner: Arc) -> Self { Self { inner, accept_compression_encodings: Default::default(), send_compression_encodings: Default::default(), max_decoding_message_size: None, max_encoding_message_size: None, } } pub fn with_interceptor( inner: T, interceptor: F, ) -> InterceptedService where F: tonic::service::Interceptor, { InterceptedService::new(Self::new(inner), interceptor) } /// Enable decompressing requests with the given encoding. #[must_use] pub fn accept_compressed(mut self, encoding: CompressionEncoding) -> Self { self.accept_compression_encodings.enable(encoding); self } /// Compress responses with the given encoding, if the client supports it. #[must_use] pub fn send_compressed(mut self, encoding: CompressionEncoding) -> Self { self.send_compression_encodings.enable(encoding); self } /// Limits the maximum size of a decoded message. /// /// Default: `4MB` #[must_use] pub fn max_decoding_message_size(mut self, limit: usize) -> Self { self.max_decoding_message_size = Some(limit); self } /// Limits the maximum size of an encoded message. /// /// Default: `usize::MAX` #[must_use] pub fn max_encoding_message_size(mut self, limit: usize) -> Self { self.max_encoding_message_size = Some(limit); self } } impl tonic::codegen::Service> for TableDefinitionServer where T: TableDefinition, B: Body + std::marker::Send + 'static, B::Error: Into + std::marker::Send + 'static, { type Response = http::Response; type Error = std::convert::Infallible; type Future = BoxFuture; fn poll_ready( &mut self, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn call(&mut self, req: http::Request) -> Self::Future { match req.uri().path() { "/komp_ac.table_definition.TableDefinition/PostTableDefinition" => { #[allow(non_camel_case_types)] struct PostTableDefinitionSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for PostTableDefinitionSvc { type Response = super::TableDefinitionResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::post_table_definition( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = PostTableDefinitionSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/CreateCustomExchangeRatesTable" => { #[allow(non_camel_case_types)] struct CreateCustomExchangeRatesTableSvc( pub Arc, ); impl< T: TableDefinition, > tonic::server::UnaryService< super::CreateCustomExchangeRatesTableRequest, > for CreateCustomExchangeRatesTableSvc { type Response = super::CreateCustomExchangeRatesTableResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request< super::CreateCustomExchangeRatesTableRequest, >, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::create_custom_exchange_rates_table( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = CreateCustomExchangeRatesTableSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/CreateInvoiceTemplateTable" => { #[allow(non_camel_case_types)] struct CreateInvoiceTemplateTableSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService< super::CreateInvoiceTemplateTableRequest, > for CreateInvoiceTemplateTableSvc { type Response = super::CreateInvoiceTemplateTableResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request< super::CreateInvoiceTemplateTableRequest, >, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::create_invoice_template_table( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = CreateInvoiceTemplateTableSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/AddTableColumns" => { #[allow(non_camel_case_types)] struct AddTableColumnsSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for AddTableColumnsSvc { type Response = super::TableDefinitionResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::add_table_columns(&inner, request) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = AddTableColumnsSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/PutTableDefinition" => { #[allow(non_camel_case_types)] struct PutTableDefinitionSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for PutTableDefinitionSvc { type Response = super::PutTableDefinitionResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::put_table_definition( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = PutTableDefinitionSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/GetProfileTree" => { #[allow(non_camel_case_types)] struct GetProfileTreeSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for GetProfileTreeSvc { type Response = super::ProfileTreeResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_profile_tree(&inner, request) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = GetProfileTreeSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/GetTableCatalog" => { #[allow(non_camel_case_types)] struct GetTableCatalogSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for GetTableCatalogSvc { type Response = super::GetTableCatalogResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_table_catalog(&inner, request) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = GetTableCatalogSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/ListColumnTypes" => { #[allow(non_camel_case_types)] struct ListColumnTypesSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for ListColumnTypesSvc { type Response = super::ListColumnTypesResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::list_column_types(&inner, request) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = ListColumnTypesSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/GetProfileDetails" => { #[allow(non_camel_case_types)] struct GetProfileDetailsSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for GetProfileDetailsSvc { type Response = super::GetProfileDetailsResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_profile_details(&inner, request) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = GetProfileDetailsSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/CopyProfile" => { #[allow(non_camel_case_types)] struct CopyProfileSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for CopyProfileSvc { type Response = super::CopyProfileResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::copy_profile(&inner, request).await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = CopyProfileSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/GetColumnAliasRenameHistory" => { #[allow(non_camel_case_types)] struct GetColumnAliasRenameHistorySvc( pub Arc, ); impl< T: TableDefinition, > tonic::server::UnaryService< super::GetColumnAliasRenameHistoryRequest, > for GetColumnAliasRenameHistorySvc { type Response = super::GetColumnAliasRenameHistoryResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request< super::GetColumnAliasRenameHistoryRequest, >, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::get_column_alias_rename_history( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = GetColumnAliasRenameHistorySvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/SetColumnPresentation" => { #[allow(non_camel_case_types)] struct SetColumnPresentationSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for SetColumnPresentationSvc { type Response = super::SetColumnPresentationResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::set_column_presentation( &inner, request, ) .await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = SetColumnPresentationSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } "/komp_ac.table_definition.TableDefinition/DeleteTable" => { #[allow(non_camel_case_types)] struct DeleteTableSvc(pub Arc); impl< T: TableDefinition, > tonic::server::UnaryService for DeleteTableSvc { type Response = super::DeleteTableResponse; type Future = BoxFuture< tonic::Response, tonic::Status, >; fn call( &mut self, request: tonic::Request, ) -> Self::Future { let inner = Arc::clone(&self.0); let fut = async move { ::delete_table(&inner, request).await }; Box::pin(fut) } } let accept_compression_encodings = self.accept_compression_encodings; let send_compression_encodings = self.send_compression_encodings; let max_decoding_message_size = self.max_decoding_message_size; let max_encoding_message_size = self.max_encoding_message_size; let inner = self.inner.clone(); let fut = async move { let method = DeleteTableSvc(inner); let codec = tonic_prost::ProstCodec::default(); let mut grpc = tonic::server::Grpc::new(codec) .apply_compression_config( accept_compression_encodings, send_compression_encodings, ) .apply_max_message_size_config( max_decoding_message_size, max_encoding_message_size, ); let res = grpc.unary(method, req).await; Ok(res) }; Box::pin(fut) } _ => { Box::pin(async move { let mut response = http::Response::new( tonic::body::Body::default(), ); let headers = response.headers_mut(); headers .insert( tonic::Status::GRPC_STATUS, (tonic::Code::Unimplemented as i32).into(), ); headers .insert( http::header::CONTENT_TYPE, tonic::metadata::GRPC_CONTENT_TYPE, ); Ok(response) }) } } } } impl Clone for TableDefinitionServer { fn clone(&self) -> Self { let inner = self.inner.clone(); Self { inner, accept_compression_encodings: self.accept_compression_encodings, send_compression_encodings: self.send_compression_encodings, max_decoding_message_size: self.max_decoding_message_size, max_encoding_message_size: self.max_encoding_message_size, } } } /// Generated gRPC service name pub const SERVICE_NAME: &str = "komp_ac.table_definition.TableDefinition"; impl tonic::server::NamedService for TableDefinitionServer { const NAME: &'static str = SERVICE_NAME; } }