Skip to main content
Glama

Convex MCP server

Official
by get-convex
document_id.rs4.34 kB
use anyhow::Context; use value::{ DeveloperDocumentId, ResolvedDocumentId, TabletId, TabletIdAndTableNumber, }; use crate::common::{ DeveloperDocumentId as DeveloperDocumentIdProto, ResolvedDocumentId as ResolvedDocumentIdProto, TabletIdAndTableNumber as TabletIdAndTableNumberProto, }; impl From<DeveloperDocumentId> for DeveloperDocumentIdProto { fn from(value: DeveloperDocumentId) -> Self { let (table_number, internal_id) = value.into_table_and_id(); Self { table_number: Some(table_number.into()), internal_id: Some(internal_id.0.to_vec()), } } } impl TryFrom<DeveloperDocumentIdProto> for DeveloperDocumentId { type Error = anyhow::Error; fn try_from( DeveloperDocumentIdProto { table_number, internal_id, }: DeveloperDocumentIdProto, ) -> anyhow::Result<Self> { let table_number = table_number .context("Missing `table_number` field")? .try_into()?; let internal_id = internal_id .context("Missing `internal_id` field")? .try_into()?; Ok(Self::new(table_number, internal_id)) } } impl From<ResolvedDocumentId> for ResolvedDocumentIdProto { fn from(value: ResolvedDocumentId) -> Self { let tablet_id_and_number = TabletIdAndTableNumber { tablet_id: value.tablet_id, table_number: value.developer_id.table(), }; let internal_id = value.developer_id.internal_id(); Self { table: Some(tablet_id_and_number.into()), internal_id: Some(internal_id.0.to_vec()), } } } impl TryFrom<ResolvedDocumentIdProto> for ResolvedDocumentId { type Error = anyhow::Error; fn try_from( ResolvedDocumentIdProto { table, internal_id }: ResolvedDocumentIdProto, ) -> anyhow::Result<Self> { let table: TabletIdAndTableNumber = table .ok_or_else(|| anyhow::anyhow!("Missing table"))? .try_into()?; let internal_id = internal_id .ok_or_else(|| anyhow::anyhow!("Missing internal_id"))? .try_into()?; let developer_id = DeveloperDocumentId::new(table.table_number, internal_id); Ok(Self { tablet_id: table.tablet_id, developer_id, }) } } impl From<TabletIdAndTableNumber> for TabletIdAndTableNumberProto { fn from( TabletIdAndTableNumber { table_number, tablet_id: table_id, }: TabletIdAndTableNumber, ) -> Self { Self { table_number: Some(table_number.into()), table_id: Some(table_id.0 .0.to_vec()), } } } impl TryFrom<TabletIdAndTableNumberProto> for TabletIdAndTableNumber { type Error = anyhow::Error; fn try_from( TabletIdAndTableNumberProto { table_id, table_number, }: TabletIdAndTableNumberProto, ) -> anyhow::Result<Self> { Ok(Self { table_number: table_number .ok_or_else(|| anyhow::anyhow!("Missing table_number"))? .try_into()?, tablet_id: TabletId( table_id .ok_or_else(|| anyhow::anyhow!("Missing table_id"))? .try_into()?, ), }) } } #[cfg(test)] mod tests { use cmd_util::env::env_config; use proptest::prelude::*; use value::testing::assert_roundtrips; use super::{ DeveloperDocumentId, ResolvedDocumentId, }; use crate::common::{ DeveloperDocumentId as DeveloperDocumentIdProto, ResolvedDocumentId as ResolvedDocumentIdProto, }; proptest! { #![proptest_config( ProptestConfig { cases: 256 * env_config("CONVEX_PROPTEST_MULTIPLIER", 1), failure_persistence: None, ..ProptestConfig::default() } )] #[test] fn test_resolved_document_id_roundtrips(left in any::<ResolvedDocumentId>()) { assert_roundtrips::<ResolvedDocumentId, ResolvedDocumentIdProto>(left); } #[test] fn test_developer_document_id_roundtrips(left in any::<DeveloperDocumentId>()) { assert_roundtrips::<DeveloperDocumentId, DeveloperDocumentIdProto>(left); } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/get-convex/convex-backend'

If you have feedback or need assistance with the MCP directory API, please join our Discord server