posthog_cli/proguard/
mod.rs1use std::path::PathBuf;
2
3use crate::{api::symbol_sets::SymbolSetUpload, utils::files::SourceFile};
4use anyhow::Result;
5use clap::Subcommand;
6use posthog_symbol_data::{write_symbol_data, ProguardMapping};
7
8pub mod upload;
9
10#[derive(Subcommand)]
11pub enum ProguardSubcommand {
12 Upload(upload::Args),
14}
15
16pub struct ProguardFile {
17 pub inner: SourceFile<String>,
18 pub release_id: Option<String>,
19 pub map_id: String,
20}
21
22impl ProguardFile {
23 pub fn new(path: &PathBuf, map_id: String) -> Result<Self> {
24 let inner: SourceFile<String> = SourceFile::load(path)?;
25
26 let map = proguard::ProguardMapping::new(inner.content.as_bytes());
27 if !map.is_valid() {
28 anyhow::bail!(
29 "File at {} is not a valid proguard mapping file",
30 path.display()
31 )
32 }
33
34 Ok(Self {
35 inner,
36 release_id: None,
37 map_id,
38 })
39 }
40}
41
42impl TryInto<SymbolSetUpload> for ProguardFile {
43 type Error = anyhow::Error;
44
45 fn try_into(self) -> Result<SymbolSetUpload> {
46 let inner = self.inner;
47
48 let data = write_symbol_data(ProguardMapping {
49 content: inner.content,
50 })?;
51
52 Ok(SymbolSetUpload {
53 chunk_id: self.map_id,
54 release_id: self.release_id,
55 data,
56 })
57 }
58}