+++ /dev/null
-use super::{Diagnostic, PackageId, Target};
-use serde::{Deserialize, Serialize};
-use std::fmt;
-use std::io::{self, BufRead, Lines, Read};
-use std::path::PathBuf;
-
-/// Profile settings used to determine which compiler flags to use for a
-/// target.
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-pub struct ArtifactProfile {
- /// Optimization level. Possible values are 0-3, s or z.
- pub opt_level: String,
- /// The amount of debug info. 0 for none, 1 for limited, 2 for full
- pub debuginfo: Option<u32>,
- /// State of the `cfg(debug_assertions)` directive, enabling macros like
- /// `debug_assert!`
- pub debug_assertions: bool,
- /// State of the overflow checks.
- pub overflow_checks: bool,
- /// Whether this profile is a test
- pub test: bool,
- #[doc(hidden)]
- #[serde(skip)]
- __do_not_match_exhaustively: (),
-}
-
-/// A compiler-generated file.
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-pub struct Artifact {
- /// The package this artifact belongs to
- pub package_id: PackageId,
- /// The target this artifact was compiled for
- pub target: Target,
- /// The profile this artifact was compiled with
- pub profile: ArtifactProfile,
- /// The enabled features for this artifact
- pub features: Vec<String>,
- /// The full paths to the generated artifacts
- /// (e.g. binary file and separate debug info)
- pub filenames: Vec<PathBuf>,
- /// Path to the executable file
- pub executable: Option<PathBuf>,
- /// If true, then the files were already generated
- pub fresh: bool,
- #[doc(hidden)]
- #[serde(skip)]
- __do_not_match_exhaustively: (),
-}
-
-/// Message left by the compiler
-// TODO: Better name. This one comes from machine_message.rs
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-pub struct CompilerMessage {
- /// The package this message belongs to
- pub package_id: PackageId,
- /// The target this message is aimed at
- pub target: Target,
- /// The message the compiler sent.
- pub message: Diagnostic,
- #[doc(hidden)]
- #[serde(skip)]
- __do_not_match_exhaustively: (),
-}
-
-/// Output of a build script execution.
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-pub struct BuildScript {
- /// The package this build script execution belongs to
- pub package_id: PackageId,
- /// The libs to link
- pub linked_libs: Vec<PathBuf>,
- /// The paths to search when resolving libs
- pub linked_paths: Vec<PathBuf>,
- /// Various `--cfg` flags to pass to the compiler
- pub cfgs: Vec<String>,
- /// The environment variables to add to the compilation
- pub env: Vec<(String, String)>,
- /// The `OUT_DIR` environment variable where this script places its output
- ///
- /// Added in Rust 1.41.
- #[serde(default)]
- pub out_dir: PathBuf,
- #[doc(hidden)]
- #[serde(skip)]
- __do_not_match_exhaustively: (),
-}
-
-/// Final result of a build.
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-pub struct BuildFinished {
- /// Whether or not the build finished successfully.
- pub success: bool,
- #[doc(hidden)]
- #[serde(skip)]
- __do_not_match_exhaustively: (),
-}
-
-/// A cargo message
-#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
-#[serde(tag = "reason", rename_all = "kebab-case")]
-pub enum Message {
- /// The compiler generated an artifact
- CompilerArtifact(Artifact),
- /// The compiler wants to display a message
- CompilerMessage(CompilerMessage),
- /// A build script successfully executed.
- BuildScriptExecuted(BuildScript),
- /// The build has finished.
- ///
- /// This is emitted at the end of the build as the last message.
- /// Added in Rust 1.44.
- BuildFinished(BuildFinished),
- /// A line of text which isn't a cargo or compiler message.
- /// Line separator is not included
- #[serde(skip)]
- TextLine(String),
- #[doc(hidden)]
- #[serde(other)]
- Unknown,
-}
-
-impl Message {
- /// Creates an iterator of Message from a Read outputting a stream of JSON
- /// messages. For usage information, look at the top-level documentation.
- pub fn parse_stream<R: BufRead>(input: R) -> MessageIter<R> {
- MessageIter {
- lines: input.lines(),
- }
- }
-}
-
-impl fmt::Display for CompilerMessage {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- write!(f, "{}", self.message)
- }
-}
-
-/// An iterator of Messages.
-pub struct MessageIter<R> {
- lines: Lines<R>,
-}
-
-impl<R: BufRead> Iterator for MessageIter<R> {
- type Item = io::Result<Message>;
- fn next(&mut self) -> Option<Self::Item> {
- let line = self.lines.next()?;
- let message = line.map(|it| {
- let mut deserializer = serde_json::Deserializer::from_str(&it);
- deserializer.disable_recursion_limit();
- Message::deserialize(&mut deserializer).unwrap_or(Message::TextLine(it))
- });
- Some(message)
- }
-}
-
-/// An iterator of Message.
-type MessageIterator<R> =
- serde_json::StreamDeserializer<'static, serde_json::de::IoRead<R>, Message>;
-
-/// Creates an iterator of Message from a Read outputting a stream of JSON
-/// messages. For usage information, look at the top-level documentation.
-#[deprecated(note = "Use Message::parse_stream instead")]
-pub fn parse_messages<R: Read>(input: R) -> MessageIterator<R> {
- serde_json::Deserializer::from_reader(input).into_iter::<Message>()
-}