pub struct PkgEntity {
pub name: String,
pub version: Option<String>,
pub description: Option<String>,
pub category: Option<String>,
pub docstring: Option<String>,
pub tags: Option<Vec<String>>,
pub pkg_type: Option<PkgType>,
pub type_source: Option<TypeSource>,
}Expand description
Canonical projection of a Lua package’s M.meta block.
name is required (= hub-index inclusion gate). Other fields are
optional and degrade UI / discoverability when absent, following the
BP convention of Cargo / JSR / npm.
Fields§
§name: String§version: Option<String>§description: Option<String>§category: Option<String>§docstring: Option<String>§pkg_type: Option<PkgType>Package type ("runnable" or "library"). Serialized as "type" on
the wire. None means the type was not determined (legacy entries).
type_source: Option<TypeSource>Records how pkg_type was determined. None for legacy entries that
pre-date provenance tracking (#[serde(default)] ensures backward
compatibility with existing hub_index.json consumers).
Uses a lenient deserializer so that legacy JSON with "type_source": "explicit" (a v0.40.0-only addition now removed) degrades to None
instead of erroring.
Implementations§
Source§impl PkgEntity
impl PkgEntity
Sourcepub fn parse_from_init_lua(path: &Path) -> Option<Self>
pub fn parse_from_init_lua(path: &Path) -> Option<Self>
Parse M.meta + leading --- docstring from an init.lua.
Returns None when the file cannot be read, M.meta is absent, or
M.meta.name is empty. Callers treat None as “not a package” and
drop the directory silently from the hub index.
The parser is not a full Lua evaluator:
- Only flat key–value pairs inside
M.metaare extracted. - Nested tables (e.g.
tags = { ... }) are skipped via brace-depth tracking; their keys are not reachable from here. - Values must be string literals (
"..."), optionally joined by..concatenation with whitespace between operators. - Occurrences of
M.metainside single-line comments (-- ...) are ignored, so docstrings mentioning the key do not hijack the search.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for PkgEntity
impl<'de> Deserialize<'de> for PkgEntity
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for PkgEntity
impl StructuralPartialEq for PkgEntity
Auto Trait Implementations§
impl Freeze for PkgEntity
impl RefUnwindSafe for PkgEntity
impl Send for PkgEntity
impl Sync for PkgEntity
impl Unpin for PkgEntity
impl UnsafeUnpin for PkgEntity
impl UnwindSafe for PkgEntity
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.