Is it possible to derive a parser for an arbitrary type that parses the corresponding Debug format?

Multi tool use
In Haskell, it is possible, as a language feature, to derive a parser from a string to an arbitrary datatype: that's called the Read class. Is it possible to do so in Rust? That is, given an arbitrary enum such as:
#[derive(Debug)]
enum Foo {
A { x: u32, s: String },
B { v: Vec<u8> },
}
and, given that Rust includes the Debug trait as a language feature that serializes an arbitrary datatype, is it possible to also automatically generate its corresponding Parse trait?
In other words, is there a default Rust feature that allows me to derive a parse(&str) -> Foo function such that, for any string s either parse(&s) == None or format!("{:?}", parse(&s).unwrap()) == s?
parsing rust
add a comment |
In Haskell, it is possible, as a language feature, to derive a parser from a string to an arbitrary datatype: that's called the Read class. Is it possible to do so in Rust? That is, given an arbitrary enum such as:
#[derive(Debug)]
enum Foo {
A { x: u32, s: String },
B { v: Vec<u8> },
}
and, given that Rust includes the Debug trait as a language feature that serializes an arbitrary datatype, is it possible to also automatically generate its corresponding Parse trait?
In other words, is there a default Rust feature that allows me to derive a parse(&str) -> Foo function such that, for any string s either parse(&s) == None or format!("{:?}", parse(&s).unwrap()) == s?
parsing rust
4
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
1
You may be interested in RON, a data format that is something of a middle ground between JSON and whatDebugoutputs, and does support deserialization through serde.
– trentcl
Nov 27 '18 at 13:47
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35
add a comment |
In Haskell, it is possible, as a language feature, to derive a parser from a string to an arbitrary datatype: that's called the Read class. Is it possible to do so in Rust? That is, given an arbitrary enum such as:
#[derive(Debug)]
enum Foo {
A { x: u32, s: String },
B { v: Vec<u8> },
}
and, given that Rust includes the Debug trait as a language feature that serializes an arbitrary datatype, is it possible to also automatically generate its corresponding Parse trait?
In other words, is there a default Rust feature that allows me to derive a parse(&str) -> Foo function such that, for any string s either parse(&s) == None or format!("{:?}", parse(&s).unwrap()) == s?
parsing rust
In Haskell, it is possible, as a language feature, to derive a parser from a string to an arbitrary datatype: that's called the Read class. Is it possible to do so in Rust? That is, given an arbitrary enum such as:
#[derive(Debug)]
enum Foo {
A { x: u32, s: String },
B { v: Vec<u8> },
}
and, given that Rust includes the Debug trait as a language feature that serializes an arbitrary datatype, is it possible to also automatically generate its corresponding Parse trait?
In other words, is there a default Rust feature that allows me to derive a parse(&str) -> Foo function such that, for any string s either parse(&s) == None or format!("{:?}", parse(&s).unwrap()) == s?
parsing rust
parsing rust
edited Nov 27 '18 at 15:25
trentcl
6,85131334
6,85131334
asked Nov 27 '18 at 0:15
MaiaVictorMaiaVictor
18.9k34104220
18.9k34104220
4
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
1
You may be interested in RON, a data format that is something of a middle ground between JSON and whatDebugoutputs, and does support deserialization through serde.
– trentcl
Nov 27 '18 at 13:47
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35
add a comment |
4
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
1
You may be interested in RON, a data format that is something of a middle ground between JSON and whatDebugoutputs, and does support deserialization through serde.
– trentcl
Nov 27 '18 at 13:47
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35
4
4
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
1
1
You may be interested in RON, a data format that is something of a middle ground between JSON and what
Debug outputs, and does support deserialization through serde.– trentcl
Nov 27 '18 at 13:47
You may be interested in RON, a data format that is something of a middle ground between JSON and what
Debug outputs, and does support deserialization through serde.– trentcl
Nov 27 '18 at 13:47
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35
add a comment |
1 Answer
1
active
oldest
votes
No, there is no such feature. Debug is intended for human/programmer consumption, not for machines.
There's no guarantee that the Debug output is even in a parseable format or that it contains the complete data of a type.
I recommend using Serde instead, paired with an existing defined serialization format of your choice.
If you wanted to, you could define your own derive attributes that implement Debug and FromStr by calling into Serde.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53490988%2fis-it-possible-to-derive-a-parser-for-an-arbitrary-type-that-parses-the-correspo%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
No, there is no such feature. Debug is intended for human/programmer consumption, not for machines.
There's no guarantee that the Debug output is even in a parseable format or that it contains the complete data of a type.
I recommend using Serde instead, paired with an existing defined serialization format of your choice.
If you wanted to, you could define your own derive attributes that implement Debug and FromStr by calling into Serde.
add a comment |
No, there is no such feature. Debug is intended for human/programmer consumption, not for machines.
There's no guarantee that the Debug output is even in a parseable format or that it contains the complete data of a type.
I recommend using Serde instead, paired with an existing defined serialization format of your choice.
If you wanted to, you could define your own derive attributes that implement Debug and FromStr by calling into Serde.
add a comment |
No, there is no such feature. Debug is intended for human/programmer consumption, not for machines.
There's no guarantee that the Debug output is even in a parseable format or that it contains the complete data of a type.
I recommend using Serde instead, paired with an existing defined serialization format of your choice.
If you wanted to, you could define your own derive attributes that implement Debug and FromStr by calling into Serde.
No, there is no such feature. Debug is intended for human/programmer consumption, not for machines.
There's no guarantee that the Debug output is even in a parseable format or that it contains the complete data of a type.
I recommend using Serde instead, paired with an existing defined serialization format of your choice.
If you wanted to, you could define your own derive attributes that implement Debug and FromStr by calling into Serde.
edited Nov 27 '18 at 14:04
answered Nov 27 '18 at 13:43
ShepmasterShepmaster
155k14307452
155k14307452
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53490988%2fis-it-possible-to-derive-a-parser-for-an-arbitrary-type-that-parses-the-correspo%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3pm0R8qpPsd,I,Uwc8myyGkGNZ11UTHjXMBU5LMh,uqM CZIYXVrj5W,nSLKezg2 oysVCDb6bHkaWpQsDkxh7EjW3Th
4
serde is probably what you are looking for.
– Stargateur
Nov 27 '18 at 0:56
1
You may be interested in RON, a data format that is something of a middle ground between JSON and what
Debugoutputs, and does support deserialization through serde.– trentcl
Nov 27 '18 at 13:47
This question is being discussed on meta.
– Script47
Nov 27 '18 at 14:35