posthog_cli/proguard/
mod.rs

1use 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 proguard mapping files
13    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}